</>
⌕
Mid #interceptor#rxjs#caching#logging

Interceptor dùng để làm gì? Ví dụ logging, caching, map response

⚡ Trả lời nhanh

Interceptor implements NestInterceptor, bọc handler bằng RxJS: chạy code trước và sau handler qua next.handle(). Dùng để log thời gian, map/chuẩn hóa response, cache (trả of(cached) mà không gọi handler), timeout, ánh xạ lỗi bằng catchError.

@Injectable()
export class WrapInterceptor implements NestInterceptor {
  intercept(ctx: ExecutionContext, next: CallHandler): Observable<unknown> {
    const t = Date.now();
    return next.handle().pipe(
      tap(() => console.log(`${Date.now() - t}ms`)),
      map((data) => ({ data, success: true })),
    );
  }
}

// cache thủ công: bỏ qua handler
// if (hit) return of(hit);
  • Nest có sẵn CacheInterceptor (với @nestjs/cache-manager) cache response của GET theo URL.
  • ClassSerializerInterceptor áp dụng @Exclude() để ẩn field như password.
🃏 Ôn bằng flashcard