Middleware trong NestJS

Middleware là một function hoặc class được thực thi trước khi request tới controllers. Nó có quyền truy cập vào request object, response object, và next function trong request-response cycle. Middleware có thể thực hiện các tác vụ như authentication, logging, error handling, v.v.

Khái Niệm Middleware

Middleware trong NestJS được kế thừa từ Express.js. Nó là một function có signature:
Middleware có thể:
  • Thực hiện code tùy ý
  • Modify request/response objects
  • Kết thúc request-response cycle
  • Gọi next() function để chuyển control tới middleware tiếp theo

Request Processing Pipeline

Functional Middleware

Cách đơn giản nhất để tạo middleware:

Sử dụng Functional Middleware

Class-Based Middleware

Để có tính tổ chức tốt hơn, sử dụng class-based middleware:

Sử dụng Class-Based Middleware

Selective Route Middleware

Áp dụng cho Routes Cụ Thể

Exclude Routes

Sử dụng Controller Classes

Chaining Middleware

Ví Dụ Thực Tế

1. Authentication Middleware

2. Request Logging Middleware

3. CORS Middleware

4. Request Timeout Middleware

5. Request Body Parser Middleware

6. User Context Middleware

7. Rate Limiting Middleware

8. Compression Middleware

Global Middleware

Middleware toàn cục (không cần khai báo trong module)

Middleware vs Interceptors

MiddlewareConsumer API

Best Practices

1. Middleware Ordering

Thứ tự middleware quan trọng:

2. Avoid Heavy Operations

Middleware nên nhẹ nhàng, tránh operations nặng:

3. Error Handling

Middleware nên handle errors gracefully:

4. Specificity

Áp dụng middleware cho routes cụ thể, không toàn cục nếu không cần:

5. Type Safety

Extend Request object một cách an toàn:

Complete Example

Kết Luận

Middleware là công cụ mạnh mẽ để xử lý cross-cutting concerns trong NestJS như:
  • Logging
  • Authentication
  • CORS
  • Rate limiting
  • Request transformation
  • Error handling
Sử dụng middleware đúng cách giúp bạn:
  • Tách biệt concerns
  • Tái sử dụng code
  • Đơn giản hóa controllers
  • Xây dựng ứng dụng modular và maintainable
Middleware được kế thừa từ Express, nên bạn có thể sử dụng hầu hết các middleware Express có sẵn trong NestJS applications.