Express中app.use()报错:需传入中间件函数的问题求助
解决
TypeError: app.use() requires a middleware function 错误 你遇到的问题核心很清晰——当前项目的routes.js没有把定义好的路由实例导出,导致app.use(routes)时,routes不是一个有效的Express中间件函数。
问题根源
在你当前项目的routes.js里,你创建了express.Router()的实例router,但没有将它导出给主文件使用。而另一项目能正常运行,本质是因为它的routes.js包含了导出语句,让require("./routes")能拿到有效的路由中间件。
修复方案
修改你的routes.js,在文件末尾添加导出语句即可:
var express = require("express"); var router = express.Router(); router.get("/signup",function(request,response){ response.sendFile(__dirname + "/Client/HTML/signup.html"); }); router.post("/signup",function(request,response){ }); router.get("/login",function(request,response){ response.sendFile(__dirname + "/Client/HTML/login.html"); }); // 新增这一行,导出路由实例 module.exports = router;
为什么另一项目能正常工作?
另一项目的routes.js必然包含了类似module.exports = router;的代码,当主文件通过require("./routes")引入时,拿到的是一个符合Express要求的路由中间件,所以app.use(routes)能正常执行。
额外小贴士
- 你也可以用更简洁的ES6风格导出,比如
exports.router = router;,但module.exports = router;是这种场景下的标准写法。 - 确认文件路径无误后,导出就是解决这个错误的关键,你的路径引用已经没问题了,所以只需补全导出步骤。
内容的提问来源于stack exchange,提问作者Seth Wheeler
相关产品推荐
相关产品推荐

