Express启动报错router.use() requires a middleware function排查
Express 报错
router.use() requires a middleware function 修复方案 错误原因
- 报错直接触发逻辑:
app.use()方法要求传入的参数必须是中间件函数,但你的代码中给该方法传入了字符串类型值,不符合参数要求,因此抛出类型错误。 - 根本代码问题:你误用
app.use()配置EJS模板引擎,不仅方法用错,配置项名称也写错了:Express 框架中配置模板引擎使用
app.set()方法,对应的配置键名为view engine(中间为空格,不是横杠连接),你写的app.use("view-engine", "ejs")完全不符合API规范,传入的字符串"ejs"被识别为中间件参数时就会触发该报错。 - 额外注意:你的
list.ejs模板文件本身没有语法错误,但需要放置在项目根目录下的views文件夹中,Express默认会从该路径读取渲染模板,否则后续会抛出模板找不到的错误。
修复步骤
- 首先确认项目已安装EJS依赖,在项目根目录执行命令:
npm install ejs
- 删除原代码中错误的模板引擎配置行,替换为正确配置,修正后的完整
app.js代码如下:
//jshint esversion:6 const express = require("express"); const bodyParser = require("body-parser"); const app = express(); // 修正模板引擎配置:使用app.set方法,配置键为view engine app.set("view engine", "ejs"); app.get("/", function(req, res){ var today = new Date(); var currentDay = today.getDay(); var day = ""; if (currentDay === 6 || currentDay === 0) { day = "Weekend"; }else { day = "weekday"; } res.render("list" , {kindofDay: day}); }); app.listen(3000, function(){ console.log("Server started on port 3000"); });
- 在项目根目录新建名为
views的文件夹,将你写好的list.ejs文件移入该文件夹。
完成以上操作后重新启动服务,即可正常访问3000端口看到渲染后的页面,不会再抛出该中间件类型错误。
内容的提问来源于stack exchange,提问作者Sourav Das
相关产品推荐
相关产品推荐

