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

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默认会从该路径读取渲染模板,否则后续会抛出模板找不到的错误。

修复步骤

  1. 首先确认项目已安装EJS依赖,在项目根目录执行命令:
npm install ejs
  1. 删除原代码中错误的模板引擎配置行,替换为正确配置,修正后的完整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");
});
  1. 在项目根目录新建名为views的文件夹,将你写好的list.ejs文件移入该文件夹。

完成以上操作后重新启动服务,即可正常访问3000端口看到渲染后的页面,不会再抛出该中间件类型错误。

内容的提问来源于stack exchange,提问作者Sourav Das

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:18:17