NestJSAdvanced
NestJS Interceptors
@NestInterceptor, logging, transform, caching — request/response-এর মাঝে logic বাংলায়।
10টি অংশবাংলা ভাষায়
Interceptor request/response-এর মাঝে custom logic চালায় — logging, transform, caching, timeout ইত্যাদি। এটি Observable (RxJS) ব্যবহার করে।
Logging Interceptor
src/common/logging.interceptor.tstypescript
typescript
import {
CallHandler,
ExecutionContext,
Injectable,
NestInterceptor,
} from "@nestjs/common";
import { Observable } from "rxjs";
import { tap } from "rxjs/operators";
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const request = context.switchToHttp().getRequest();
const start = Date.now();
console.log("➡️", request.method, request.url);
return next.handle().pipe(
tap(() =>
console.log("⬅️", request.method, request.url, Date.now() - start + "ms"),
),
);
}
}Response Transform
src/common/transform.interceptor.tstypescript
typescript
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from "@nestjs/common";
import { Observable } from "rxjs";
import { map } from "rxjs/operators";
export interface Response<T> {
success: boolean;
data: T;
}
@Injectable()
export class TransformInterceptor<T> implements NestInterceptor<T, Response<T>> {
intercept(context: ExecutionContext, next: CallHandler): Observable<Response<T>> {
return next.handle().pipe(
map((data) => ({
success: true,
data,
})),
);
}
}
// সব response:
// { success: true, data: ... }Timeout Interceptor
import { Injectable, NestInterceptor, RequestTimeoutException } from "@nestjs/common";
import { Observable, TimeoutError, throwError } from "rxjs";
import { catchError, timeout } from "rxjs/operators";
@Injectable()
export class TimeoutInterceptor implements NestInterceptor {
intercept(context, next): Observable<any> {
return next.handle().pipe(
timeout(10000), // 10s পর request timeout
catchError((err) => {
if (err instanceof TimeoutError) {
return throwError(() => new RequestTimeoutException());
}
return throwError(() => err);
}),
);
}
}Apply Interceptor
import { UseInterceptors, Post, Controller } from "@nestjs/common";
import { LoggingInterceptor } from "../common/logging.interceptor";
// controller-লেভেল
@UseInterceptors(LoggingInterceptor)
@Controller("users")
export class UsersController {}
// method-লেভেল
@Post()
@UseInterceptors(new LoggingInterceptor())
create() {}
// global
app.useGlobalInterceptors(new TransformInterceptor());Order of execution
Guard → Interceptor (before) → Pipe → Controller → Interceptor (after/transform)। তাই logging interceptor সবচেয়ে early দেখতে পারেন।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।