NestJSIntermediate
NestJS Middleware
Custom middleware, functional middleware, DI, apply — NestJS middleware বাংলায়।
10টি অংশবাংলা ভাষায়
Middleware route handler-এর আগে execute হয় — logging, CORS, body parsing ইত্যাদি। NestJS-এ prototype (class) বা functional দুইভাবেই লেখা যায়।
Custom Middleware
src/common/logger.middleware.tstypescript
typescript
import { Injectable, NestMiddleware } 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...", req.method, req.originalUrl);
next();
}
}Module-এ Middleware Register
src/app.module.tstypescript
typescript
import { Module, NestModule, MiddlewareConsumer } from "@nestjs/common";
import { LoggerMiddleware } from "./common/logger.middleware";
@Module({
imports: [],
controllers: [],
providers: [],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.forRoutes("users"); // শুধু /users routes
// সব route-এ চাইলে
consumer.apply(LoggerMiddleware).forRoutes("*");
// method restriction
consumer.apply(LoggerMiddleware).forRoutes({
path: "users",
method: RequestMethod.POST,
});
}
}Functional Middleware
src/common/request-id.middleware.tstypescript
typescript
import { Request, Response, NextFunction } from "express";
import { randomUUID } from "node:crypto";
export function requestIdMiddleware(
req: Request,
res: Response,
next: NextFunction,
) {
req.headers["x-request-id"] = randomUUID();
next();
}
// register — class না, function
consumer.apply(requestIdMiddleware).forRoutes("*");DI-যুক্ত Middleware
@Injectable()
export class AuthMiddleware implements NestMiddleware {
// service inject করা যায়
constructor(private readonly tokenService: TokenService) {}
async use(req: Request, res: Response, next: NextFunction) {
const token = req.headers.authorization?.split(" ")[1];
if (token) {
req["user"] = await this.tokenService.verify(token);
}
next();
}
}Middleware বনাম Guard
Middleware raw Express-এ কাজ করে — Pipe, Guard পূর্ণ context access পায়। Authentication logic গার্ডে রাখাই ভালো; middleware শুধু সহজ transform/logging-এর জন্য।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।