You need to enable JavaScript to run this app. Express路由报Router.use()需中间件函数却得到Object错误,如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Express路由报Router.use()需中间件函数却得到Object错误,如何解决?

问题原因

你遇到的TypeError: Router.use() requires a middleware function but got a Object错误,本质是apiRouter.use()接收的minionsRouter/ideasRouter/meetingsRouter不是有效的Express Router实例,而是空对象,触发原因有两个核心问题:

  1. 文件名大小写不匹配:你的路由文件命名为Minions.js(首字母大写),但在API.js中引入时写的是require('./minions')(全小写),在大小写敏感的操作系统(Linux、macOS默认文件系统)中,会找不到对应文件,引入结果为空对象。
  2. 路由文件导出顺序不规范:你在Minions.js中刚创建Router实例就直接导出,虽然JavaScript引用类型的特性不会导致后续绑定的路由丢失,但不符合模块导出规范,容易在后续修改代码时踩坑。

解决方案

  • 第一步:统一文件名和引入路径的大小写,将Minions.js重命名为minions.js,同理确认ideas.js、meetings.js的文件名和API.js中require的路径完全一致。
  • 第二步:调整所有路由文件的导出位置,将module.exports放到文件末尾,修改后的minions.js示例如下:
const minionsRouter = require('express').Router();

const {
    getAllFromDatabase,
    addToDatabase,
    getFromDatabaseById,
    updateInstanceInDatabase,
    deleteFromDatabasebyId,
} = require('./db.js');

minionsRouter.get('/', (req, res, next) => {
    const minionsArray = getAllFromDatabase('minions');

    if (minionsArray) {
        res.status(200).send(minionsArray);
    } else {
        res.status(404).send();
    }
});

// 导出放到代码最后
module.exports = minionsRouter;
  • 第三步:检查ideas.js、meetings.js两个文件,确认均按上述规范导出了有效的Router实例,没有缺失导出的问题。
  • 调试兜底方案:如果修改后仍报错,可以在API.js中引入路由后加一行打印console.log(minionsRouter),如果输出为空对象,再核对路径、文件名、导出逻辑即可定位问题。

内容的提问来源于stack exchange,提问作者Maurice Markslag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 19:54:04