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
相关产品推荐
相关产品推荐

