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

如何从单个express模块导入多中间件,解决Route.get()回调报错问题

问题根源

你遇到的报错核心是authMiddleware.getConnectedPerson实际不是函数,express路由校验中间件类型失败触发报错,具体由两个错误导致:

  1. 导入路径错误
    你写的require("auth")会优先从项目node_modules目录下查找名为auth的第三方包,不会加载你本地写的auth.ts文件,路径需要改为你本地auth.ts的相对路径,比如和控制器同级的话是./auth。
  2. ES Module导出和CommonJS导入混用不匹配
    你的auth.ts用的是ES Module的具名导出语法export function getConnectedPerson,而控制器里用CommonJS的require语法导入,TS编译后两种模块规范的导出结构不匹配,导致你拿不到导出的方法。

修复方案

推荐统一项目的模块导入导出风格,全部用ES Module的import语法,替换控制器里的require导入代码:

// 路径按你实际的auth.ts存放目录调整
import * as authMiddleware from "./auth";

替换后authMiddleware.getConnectedPerson就能正确拿到你导出的中间件函数,路由就可以正常识别。

可选优化(非当前报错必要修复项)

给中间件的next参数补全类型,避免TS类型校验报错:

// 先从express导入NextFunction
import { Request, Response, NextFunction } from "express";

export function getConnectedPerson(req: Request, res: Response, next: NextFunction) {
  // 原有逻辑不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:06:01