如何从单个express模块导入多中间件,解决Route.get()回调报错问题
问题根源
你遇到的报错核心是authMiddleware.getConnectedPerson实际不是函数,express路由校验中间件类型失败触发报错,具体由两个错误导致:
- 导入路径错误
你写的require("auth")会优先从项目node_modules目录下查找名为auth的第三方包,不会加载你本地写的auth.ts文件,路径需要改为你本地auth.ts的相对路径,比如和控制器同级的话是./auth。 - 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
相关产品推荐
相关产品推荐

