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

NestJS如何给控制器应用中间件并排除指定路由?

NestJS给控制器应用中间件并排除指定路由

要给DriversController应用LoggerMiddleware并排除/create和/login路由,你可以通过exclude()方法传入路由描述对象或路径字符串来实现,具体有两种常用写法:

方法一:指定请求方法和相对路径(更精准)

这种方式会精确匹配控制器内指定方法的路由,避免误排除其他方法的同名路径。需要先导入RequestMethod:

import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
import { DriversController } from './drivers.controller';
import { LoggerMiddleware } from './logger.middleware';

export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .exclude(
        { path: 'create', method: RequestMethod.POST },
        { path: 'login', method: RequestMethod.POST }
      )
      .forRoutes(DriversController);
  }
}

这里的path是相对于控制器前缀/driver的路径,因为我们已经通过forRoutes(DriversController)指定了目标控制器,所以不需要重复写/driver前缀。

方法二:直接传入完整路径字符串

如果不需要区分请求方法,也可以直接传入完整的路由路径:

import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { DriversController } from './drivers.controller';
import { LoggerMiddleware } from './logger.middleware';

export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .exclude('/driver/create', '/driver/login')
      .forRoutes(DriversController);
  }
}

这种写法更简洁,但会排除所有请求方法下的该路径,适合确定只有单一方法使用该路径的场景。

两种方式都能实现你的需求,根据实际情况选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:50:48