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

Express报错:Router.use()需传入中间件函数却收到字符串

Express错误排查:Router.use() requires a middleware function but got a string

错误原因及解决办法

1. 路由模块未正确导入

你的index.js中,todoRoute被定义为字符串路径"./Routes/todo-route.js",但app.use()的第二个参数需要传入Express路由对象或中间件函数,直接传字符串会触发这个类型错误。

解决办法:
将路由路径字符串改为用require()导入模块:

// 原代码
const todoRoute = "./Routes/todo-route.js";

// 修改后
const todoRoute = require("./Routes/todo-route.js");

2. 路由文件中require语法错误

todo-route.js里的require(express)缺少引号,require()函数需要接收字符串类型的模块名,这里未加引号会把express当作未定义变量,导致路由模块加载失败。

解决办法:
给模块名加上双引号:

// 原代码
const express = require(express);

// 修改后
const express = require("express");

额外优化点

除了上述错误,还有两个小问题可以优化:

  • mongoose.connect().then(console.log("DB Connected successfuly"))会立即执行console.log,不管连接是否成功,应改为传入函数:.then(() => console.log("DB Connected successfully"))
  • const PORT = 5000 || process.env.PORT顺序错误,应优先使用环境变量的端口,改为const PORT = process.env.PORT || 5000

修正后的完整代码

index.js

const express = require("express");
const cors = require("cors");
const mongoose = require("mongoose");
const dotenv = require("dotenv");
const todoRoute = require("./Routes/todo-route.js");

const app = express();

dotenv.config();
app.use(cors());
app.use(express.json());

mongoose
    .connect(process.env.MONGODB_URI, {
        useNewUrlParser: true,
    })
    .then(() => console.log("DB Connected successfully"))
    .catch((error) => {
        console.log(error);
    });

app.get("/", (req, res) => {
    res.send("this is the homepage");
});
app.use("/api/todos", todoRoute);

const PORT = process.env.PORT || 5000;

app.listen(PORT, () => {
    console.log(`Listening on http://localhost:${PORT}`);
});

todo-route.js

const express = require("express");

const router = express.Router();

router.get("/", (req, res) => {
    res.send("this is get route");
});

router.post("/", (req, res) => {
    res.send("this is post route");
});

router.put("/:id", (req, res) => {
    res.send("this is update route");
});

router.delete("/:id", (req, res) => {
    res.send("this is delete route");
});

module.exports = router;

内容的提问来源于stack exchange,提问作者Waleed ur Rehman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:48:26