Node.js MVC路由中集成Middleware时调用类控制器方法报错如何解决
错误原因
你收到的报错本质是传入router.get()的参数中存在非函数类型的对象,大概率是中间件的导出/引入方式错误,或者你在传参时误执行了函数将返回值传入了路由配置。
正确接入步骤
- 检查中间件的导出/引入格式
中间件最终导出的必须是符合(req, res, next)签名的函数,不能直接导出对象:
// 中间件文件正确导出示例 module.exports = (req, res, next) => { // 你的中间件逻辑 next() }
如果你采用了对象包裹的导出方式(比如module.exports = { authMiddleware }),引入时需要对应解构:
// 路由文件引入示例 const { authMiddleware } = require('./middleware/auth') const Unit = require('./controller/Unit')
- 按正确顺序配置路由参数
Express路由方法支持传入任意多个回调函数,中间件放在业务处理函数之前即可,不需要调整你原有Controller的调用逻辑,只要保证每个传入参数都是函数引用即可:
// 正确的路由配置示例 router.get('/unit/list', authMiddleware, Unit.list)
注意不要给Unit.list加括号(不要写成Unit.list()),加括号会直接执行函数把返回值传入路由,也会触发类型报错。
- 如果中间件是类方法的特殊处理
如果你的中间件封装在类内部,需要确保传入的是绑定了正确this的函数引用:
const Middleware = require('./middleware/AuthMiddleware') const authMiddleware = new Middleware() router.get('/unit/list', authMiddleware.check.bind(authMiddleware), Unit.list)
内容的提问来源于stack exchange,提问作者Anderson Dev
相关产品推荐
相关产品推荐

