NodeJS+MongoDB API开发报错:Router.use()需中间件函数却获undefined
嘿,我帮你搞定这个Express路由错误啦!
你遇到的这个TypeError: Router.use() requires a middleware function but got a undefined,核心原因很明确——你的api.js模块没有把定义好的Express Router对象返回给server.js,导致app.use()拿到了个无效的undefined值。
具体修复步骤:
1. 给api.js加上Router返回语句
在api.js的函数末尾,一定要把创建好的api路由对象return出去,这样server.js里调用导出的函数时才能拿到有效的路由中间件:
module.exports = function(app,express){ var api = express.Router(); // --- 你的signup路由代码 --- // 关键:返回路由对象 return api; };
2. 修复模型实例的大小写错误
另外,我还发现api.js里有个小坑:你导入的模型是var user = require('../model/user');,但创建实例的时候写了new User(...),这里大小写不匹配会导致User is not defined的新错误,得改成一致的:
// 改成和导入变量一致的小写,或者把导入改成var User = ... 更规范 var newUser = new user({ name:req.body.name, username:req.body.username, password:req.body.password });
(个人建议把导入语句改成var User = require('../model/user');,符合JS类名的大写命名规范,代码更易读)
3. 重启服务验证
保存所有修改后重启你的Node服务,现在app.use("/api", ...)就能正确识别路由对象,不会再抛出那个错误啦!
小技巧
以后遇到这类模块导出问题,可以临时加个console.log来检查导出内容:
// 在server.js里加一行看看 const apiRouter = require('./app/route/api')(app,express); console.log(apiRouter); // 如果是Router对象就没问题,要是undefined就说明导出有问题 app.use("/api", apiRouter);
内容的提问来源于stack exchange,提问作者Vizzi
相关产品推荐
相关产品推荐

