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

NestJS中用JavaScript编写中间件遇错误,请求协助排查

NestJS 中间件编写错误修正

代码中的核心问题

  1. 模块类继承错误
    模块类不能继承NestMiddleware,NestJS的模块需要通过@Module()装饰器定义,并实现NestModule接口来配置中间件。同时你代码中引用的ApiTokenCheckMiddleware未导入,导致无法识别。

  2. 中间件实现方式错误

    • 无需手动创建Express实例app = express(),NestJS已集成Express环境,直接编写符合规范的中间件即可。
    • 导入@nestjs/common时无需写绝对路径到node_modules,直接包名导入即可。
    • 原有中间件未调用next(),会导致请求被挂起,无法继续处理。

修正后的代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:22:52