Express拆分路由运行报Router.use require a middleware but got undefined错误
错误原因
- 导出的路由对象不符合Express中间件要求:
routers.js中你错误将router.get()方法的调用结果赋值给users变量导出,app.use()接收的第二个参数需要是中间件函数或者Router实例,你当前导出的users不符合传入要求,因此触发类型错误。 - 路由路径重复配置:你在
app.js中已经通过app.use("/users", xxx)给该组路由统一添加了/users前缀,若Router内部的接口路径仍写为/users,最终完整访问路径会变为/users/users,不符合常规开发预期。
修复方案
第一步:修改routers.js代码
const express = require("express"); const router = express.Router(); // 外层已配置/users前缀,此处路径写/即可,最终访问路径为 /users router.get("/", (req, res) => { console.log("Route Created"); // 必须返回响应,否则请求会一直挂起 res.send("Users Page"); }) // 直接导出完整的Router实例作为中间件 module.exports = router;
第二步:修改app.js代码
const express = require("express"); // 引入路由文件导出的Router实例 const usersRouter = require("./routers/routers"); const app = express(); const PORT = 3000; app.get("/", (req, res)=>{ res.send("Home Page"); }) // 传入合法的Router实例作为中间件 app.use("/users", usersRouter); app.listen(PORT, ()=>{ console.log("Server Started"); })
修复完成后重启服务,访问http://localhost:3000/users即可正常获取响应,报错问题解决。
内容的提问来源于stack exchange,提问作者Xiris
相关产品推荐
相关产品推荐

