NestJS中用JavaScript编写中间件遇错误,请求协助排查
NestJS 中间件编写错误修正
代码中的核心问题
模块类继承错误
模块类不能继承NestMiddleware,NestJS的模块需要通过@Module()装饰器定义,并实现NestModule接口来配置中间件。同时你代码中引用的ApiTokenCheckMiddleware未导入,导致无法识别。中间件实现方式错误
- 无需手动创建Express实例
app = express(),NestJS已集成Express环境,直接编写符合规范的中间件即可。 - 导入
@nestjs/common时无需写绝对路径到node_modules,直接包名导入即可。 - 原有中间件未调用
next(),会导致请求被挂起,无法继续处理。
- 无需手动创建Express实例
修正后的代码
app.module.ts
import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common'; import { ApiTokenCheckMiddleware } from './middlewares/api-token-check.middleware'; // 替换为你的中间件实际路径 @Module({ // 这里可以添加模块的控制器、服务等配置 }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer .apply(ApiTokenCheckMiddleware) .forRoutes({ path: '*', method: RequestMethod.ALL }); } }
中间件文件(api-token-check.middleware.ts)
import { NestMiddleware } from '@nestjs/common'; import { Request, Response, NextFunction } from 'express'; export class ApiTokenCheckMiddleware implements NestMiddleware { use(req: Request, res: Response, next: NextFunction) { console.log(req.headers); next(); // 必须调用此方法,让请求继续流转 } }
如果偏好函数式中间件,也可以这样写:
import { Request, Response, NextFunction } from 'express'; export const ApiTokenCheckMiddleware = (req: Request, res: Response, next: NextFunction) => { console.log(req.headers); next(); };
关键注意事项
- 确保中间件文件路径正确,在AppModule中正确导入。
- 中间件必须调用
next(),否则请求会停滞在中间件环节。 - 不要在中间件内重新创建Express实例,依赖NestJS提供的环境即可。
内容的提问来源于stack exchange,提问作者Dino Hobie
相关产品推荐
相关产品推荐

