Trung BìnhNestJS iconNestJS

ExecutionContext trong NestJS là gì? Cách switch giữa HTTP và WebSocket context?

ExecutionContext extends ArgumentsHost, cung cấp thông tin về execution context hiện tại (HTTP, WebSocket, RPC). Guards, Interceptors và Exception Filters đều nhận ExecutionContext.

Các methods quan trọng:
- getType(): trả về 'http' | 'ws' | 'rpc'
- switchToHttp(): trả về HttpArgumentsHost với getRequest(), getResponse()
- switchToWs(): trả về WsArgumentsHost với getData(), getClient()
- switchToRpc(): cho microservices
- getHandler(): trả về handler function đang được gọi
- getClass(): trả về controller class

Dùng getHandler()getClass() kết hợp Reflector để đọc metadata:

typescript
const roles = this.reflector.getAllAndOverride<string[]>('roles', [
  context.getHandler(),  // Route-level metadata
  context.getClass(),    // Controller-level metadata
]);

Pattern này cho phép metadata được định nghĩa ở cả route lẫn controller, với route-level ưu tiên hơn.

Xem toàn bộ NestJS cùng filter theo level & chủ đề con.

Mở danh sách NestJS