Express项目调用signin.handleSignin报is not a function错误如何解决
问题原因
- 导出导入逻辑不匹配:
signin.js使用export default默认导出handleSignin函数,因此server.js中导入的signin本身就是目标函数,不是包含handleSignin属性的对象,调用signin.handleSignin()自然会触发类型错误。 - 路由重复定义:
server.js中先后声明了两次POST /signin路由,即使修复调用错误,后定义的内联路由也会覆盖控制器路由,属于冗余冲突代码。
解决方法
你可以任选以下任意一种方案修复:
方案1:保留默认导出,修改调用逻辑
直接修改server.js中的路由声明,将原代码:
app.post('/signin', signin.handleSignin(db, bcrypt))
替换为:
app.post('/signin', signin(db, bcrypt))
之后删除server.js中后续重复定义的内联app.post("/signin", (req, resp) => { ... })代码块即可。
方案2:改为命名导出适配原调用逻辑
如果后续signin.js需要导出多个方法,可以修改导出导入逻辑:
- 把
signin.js末尾的export default handleSignin;替换为:
export { handleSignin }
- 修改
server.js中的导入语句为:
import { handleSignin } from "./controllers/signin.js"
- 修改路由声明为:
app.post('/signin', handleSignin(db, bcrypt))
同样删除后续重复的/signin路由代码即可。
内容的提问来源于stack exchange,提问作者Rocket455
相关产品推荐
相关产品推荐

