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

