You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js MVC路由中集成Middleware时调用类控制器方法报错如何解决

错误原因

你收到的报错本质是传入router.get()的参数中存在非函数类型的对象,大概率是中间件的导出/引入方式错误,或者你在传参时误执行了函数将返回值传入了路由配置。

正确接入步骤

  1. 检查中间件的导出/引入格式
    中间件最终导出的必须是符合(req, res, next)签名的函数,不能直接导出对象:
// 中间件文件正确导出示例
module.exports = (req, res, next) => {
  // 你的中间件逻辑
  next()
}

如果你采用了对象包裹的导出方式(比如module.exports = { authMiddleware }),引入时需要对应解构:

// 路由文件引入示例
const { authMiddleware } = require('./middleware/auth')
const Unit = require('./controller/Unit')
  1. 按正确顺序配置路由参数
    Express路由方法支持传入任意多个回调函数,中间件放在业务处理函数之前即可,不需要调整你原有Controller的调用逻辑,只要保证每个传入参数都是函数引用即可:
// 正确的路由配置示例
router.get('/unit/list', authMiddleware, Unit.list)

注意不要给Unit.list加括号(不要写成Unit.list()),加括号会直接执行函数把返回值传入路由,也会触发类型报错。

  1. 如果中间件是类方法的特殊处理
    如果你的中间件封装在类内部,需要确保传入的是绑定了正确this的函数引用:
const Middleware = require('./middleware/AuthMiddleware')
const authMiddleware = new Middleware()
router.get('/unit/list', authMiddleware.check.bind(authMiddleware), Unit.list)

内容的提问来源于stack exchange,提问作者Anderson Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:24:03