Middleware helps you run code before your route handles a request. It can check or change requests easily.
0
0
Applying middleware to routes in NestJS
Introduction
You want to log every request to certain routes.
You need to check if a user is logged in before accessing a page.
You want to add headers or modify requests for specific routes.
You want to block requests from certain IP addresses on some routes.
Syntax
NestJS
import { Injectable, NestMiddleware } from '@nestjs/common'; import { Request, Response, NextFunction } from 'express'; @Injectable() export class MyMiddleware implements NestMiddleware { use(req: Request, res: Response, next: NextFunction) { // your code here next(); } } // In your module import { MiddlewareConsumer, Module, RequestMethod } from '@nestjs/common'; @Module({ providers: [MyMiddleware] }) export class AppModule { configure(consumer: MiddlewareConsumer) { consumer .apply(MyMiddleware) .forRoutes('route-path'); } }
Middleware class must implement NestMiddleware and have a use method.
Use consumer.apply(...).forRoutes(...) to attach middleware to routes.
Examples
This applies
LoggerMiddleware to all requests to the /cats route.NestJS
consumer.apply(LoggerMiddleware).forRoutes('cats');This applies
AuthMiddleware only to GET requests on /dogs.NestJS
consumer.apply(AuthMiddleware).forRoutes({ path: 'dogs', method: RequestMethod.GET });This applies two middleware in order to the
/users route.NestJS
consumer.apply(LoggerMiddleware, AuthMiddleware).forRoutes('users');This applies middleware to all routes and methods.
NestJS
consumer.apply(MyMiddleware).forRoutes({ path: '*', method: RequestMethod.ALL });Sample Program
This example creates a simple logger middleware that prints the HTTP method and URL for GET requests to /hello. It shows how to apply middleware to a specific route and method.
NestJS
import { Injectable, NestMiddleware, MiddlewareConsumer, Module, RequestMethod } from '@nestjs/common'; import { Request, Response, NextFunction } from 'express'; @Injectable() export class LoggerMiddleware implements NestMiddleware { use(req: Request, res: Response, next: NextFunction) { console.log(`Request to: ${req.method} ${req.url}`); next(); } } @Module({ providers: [LoggerMiddleware] }) export class AppModule { configure(consumer: MiddlewareConsumer) { consumer .apply(LoggerMiddleware) .forRoutes({ path: 'hello', method: RequestMethod.GET }); } } // Assume a controller with GET /hello route exists
OutputSuccess
Important Notes
Always call next() in middleware to continue the request cycle.
You can apply middleware to multiple routes or methods by passing arrays.
Middleware runs before route handlers, so it can block or modify requests early.
Summary
Middleware runs code before routes handle requests.
Use consumer.apply(...).forRoutes(...) to attach middleware to routes.
Middleware can log, check, or change requests easily.