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

Router.use()报错:需传入中间件函数却得到对象,求解析

解析Express中Router.use()报错与回调形式“正常运行”的原因

报错核心原因

Router.use() requires a middleware function but got a Object 错误的本质是:你导入的adminRouter或userRouter不是合法的Express Router实例,而是普通对象。

当你使用app.use("/admin", adminRouter)时,Express要求第二个参数必须是中间件函数或者Express Router实例,但你的./routes/admin.js或./routes/user.js文件导出的内容不符合要求——比如可能漏写了module.exports = router;,或者导出了其他非Router类型的对象。

回调形式“正常运行”的真相

你改成app.use("/admin", ()=>adminRouter)后代码不再报错,是因为Express仅校验第二个参数是否为函数,这个箭头函数本身是合法的中间件函数。但要注意:这种写法并没有真正让路由生效——所有/admin开头的请求只会执行这个空回调(它仅返回router对象,并未触发路由逻辑),你的实际路由处理代码根本不会被执行,属于“表面正常、实际无效”的情况。

正确解决方法

检查你的路由文件,确保正确创建并导出Express Router实例,示例如下:

./routes/admin.js 正确写法:

const express = require("express");
// 创建Router实例
const router = express.Router();

// 定义路由逻辑
router.get("/dashboard", (req, res) => {
  res.send("Admin Dashboard");
});

// 导出Router实例
module.exports = router;

主文件中直接使用:

app.use("/admin", adminRouter);

这样就能正常挂载路由,同时避免报错。

内容的提问来源于stack exchange,提问作者Aditya Narayan Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:22:38