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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:24:48