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

NestJS中如何为所有路由统一应用鉴权中间件,避免逐个配置控制器

全量路由挂载鉴权中间件的调整方案

你不需要逐次把新增的控制器追加到forRoutes的配置列表里,NestJS的路由匹配逻辑原生支持*通配符,传入该参数即可让目标中间件匹配应用内所有已注册的路由。

最小化调整后的模块配置

直接将原有逐控制器枚举的写法替换为通配符匹配模式即可:

export class AppModule implements NestModule {
  public configure(consumer: MiddlewareConsumer): void {
    consumer.apply(GetUserMiddleware).forRoutes('*');
  }
}

配套实用技巧

  • 该配置会覆盖所有HTTP方法、所有路径前缀下的已注册路由,完全替代之前逐个枚举控制器的冗余配置,后续新增业务控制器时,不需要回头修改这段中间件配置即可自动让新路由纳入鉴权范围。
  • 如果需要给公共匿名路由(比如登录接口、健康检查接口)跳过鉴权逻辑,不需要修改全量挂载的基础配置,可链式调用exclude方法单独排除对应路径,示例写法:
    import { RequestMethod } from '@nestjs/common';
    
    export class AppModule implements NestModule {
      public configure(consumer: MiddlewareConsumer): void {
        consumer.apply(GetUserMiddleware)
          .forRoutes('*')
          .exclude(
            'auth/login',
            'health/check',
            { path: 'public/*', method: RequestMethod.GET }
          );
      }
    }
    
  • 不少开发者翻阅官方文档时找不到对应说明,是因为通配符全量匹配的规则,是附在中间件章节的路由通配符小节里说明的,没有单独设置“全量路由挂载”的独立模块,很容易被漏看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 06:15:08