Interceptors trong NestJS

Interceptors là một công cụ mạnh mẽ cho phép bạn intercept (chặn) method calls và modify request/response. Một interceptor là một class implement interface NestInterceptor. Interceptors được thực thi sau guards nhưng trước pipes.

Khái Niệm Interceptor

Interceptor có khả năng:
  1. Intercept incoming request trước khi tới controller
  2. Transform response sau khi controller xử lý xong
  3. Add extra logic xung quanh method execution
  4. Handle exceptions throw ra từ method

Request Processing Pipeline (with Interceptors)

CallHandler và Observable

Interceptor nhận CallHandler mà có method handle() trả về Observable:

Ví Dụ Interceptors Thực Tế

1. Logging Interceptor

2. Response Transformation Interceptor

3. Error Handling Interceptor

4. Request Modification Interceptor

5. Caching Interceptor

6. Compression Interceptor

7. Performance Monitoring Interceptor

8. Timeout Interceptor

9. Request/Response Body Logging Interceptor

10. Circular Reference Handling Interceptor

Interceptors at Different Scopes

Method-level

Class-level

Global-level

Module-level (Provider)

Async Interceptors

Interceptors có thể async:

Combining Multiple Interceptors

Interceptors được thực thi theo thứ tự khai báo:

RxJS Operators in Interceptors

Best Practices

1. Tách Biệt Concerns

2. Use Observable Operators Properly

3. Avoid Heavy Operations

4. Handle Errors Properly

5. Type Safety

Complete Example

Interceptors vs Other Features

Kết Luận

Interceptors là công cụ mạnh mẽ để:
  • Transform requests và responses
  • Log requests/responses
  • Cache results
  • Handle errors consistently
  • Monitor performance
  • Modify behavior của applications
Sử dụng Interceptors đúng cách giúp bạn:
  • Tách biệt concerns một cách rõ ràng
  • Tái sử dụng logic xuyên các routes
  • Có khả năng bắt và modify requests/responses
  • Tạo consistent response format
  • Cải thiện debugging và monitoring
  • Xây dựng ứng dụng maintainable và scalable