Node.js Express报错Router.use()需要中间件函数但得到undefined如何解决
错误原因
这个报错是因为Router.use()或app.use()接收的第二个参数不是合法的中间件/路由函数,而是undefined。
排查&解决步骤
- 核对路由文件路径与文件名拼写
你在index.js中引入用户路由的路径是./routes/user-router,但你给出的用户路由文件名是user.js,二者不匹配的情况下,引入得到的userRoutes是空对象,取userRoutes.routes就是undefined,传入app.use就会触发报错。
需要核对所有引入的路由文件(roles-router.js、login-router等)的实际文件名、路径是否和引入语句完全一致,区分大小写。 - 修正控制器方法拼写错误
你在user.js路由中写的UserC.crreateUsers存在拼写错误,多了一个r,正确应为UserC.createUsers。如果你的userControllers.js中导出的方法名是createUsers,那么此处传入路由的处理函数就是undefined,也会触发报错。
同时需要确认userControllers.js中确实导出了getUsers、createUsers、getUser三个方法,导出格式匹配你的引入方式:如果控制器是普通导出module.exports = { getUsers, createUsers, getUser },当前引入const UserC = require('../controllers/userControllers.js')就是正确的。 - 核对所有路由文件的导出结构
你当前的user.js路由导出格式是module.exports = { routes: router },需要确认其他所有路由文件(roles-router、login-router等)的导出格式完全一致,不要出现部分路由直接导出router的情况,否则取.routes就会得到undefined。 - 检查app.js中的默认路由
你在app.js中引入了app.use(require('./routes/index')),需要确认./routes/index文件导出的是合法的路由实例/中间件,没有导出undefined。
内容的提问来源于stack exchange,提问作者yordy espinsa
相关产品推荐
相关产品推荐

