Careeroza
Applying Middleware
MiddlewareConsumer
Middleware is not listed in @Module(). The module implements NestModule and wires it in configure().
src/app.module.ts
import { MiddlewareConsumer, Module, NestModule, RequestMethod } from '@nestjs/common';
import { ProductsModule } from './products/products.module';
import { ProductsController } from './products/products.controller';
import { RequestIdMiddleware } from './common/middleware/request-id.middleware';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { blockBots } from './common/middleware/block-bots.middleware';
@Module({ imports: [ProductsModule] })
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(RequestIdMiddleware, LoggerMiddleware) // run in this order
.exclude({ path: 'health', method: RequestMethod.GET })
.forRoutes('{*splat}'); // all routes (NestJS 11 / Express 5 syntax)
consumer.apply(blockBots).forRoutes(ProductsController); // only this controller
consumer.apply(blockBots).forRoutes({ path: 'orders', method: RequestMethod.POST });
}
}Note: NestJS 11 uses Express 5, whose path syntax changed: a bare * wildcard is written {*splat} (or *splat). In NestJS 10 you wrote forRoutes('*'); NestJS 11 still converts it but logs a warning.