Không có sự khác biệt cơ bản giữa pipe thông thường và pipe trong web socket. Điểm khác duy nhất là thay vì ném HttpException, bạn nên dùng WsException. Ngoài ra, tất cả pipe sẽ chỉ được áp dụng cho tham số data (vì việc kiểm tra dữ liệu hay chuyển đổi instance client là vô nghĩa).
Gợi ý Class WsException được export từ package @nestjs/websockets.
Ghi chú người dịch Trong giao tiếp WebSocket không tồn tại khái niệm response HTTP (status code, header…), nên HttpException không có ý nghĩa gì ở đây. WsException sẽ được exception filter của Nest bắt lại và chuyển thành message lỗi gửi qua socket cho client, thay vì trả về một HTTP response như bên REST.
Gắn pipe (Binding pipes)
Ví dụ sau đây sử dụng một pipe được khởi tạo thủ công ở phạm vi method (method-scoped). Giống như với ứng dụng HTTP, bạn cũng có thể dùng pipe ở phạm vi gateway (gateway-scoped), tức là thêm decorator @UsePipes() vào trước class gateway.
@UsePipes(new ValidationPipe({ exceptionFactory: (errors) => new WsException(errors) }))
@SubscribeMessage('events')
handleEvent(client: Client, data: unknown): WsResponse<unknown> {
const event = 'events';
return { event, data };
}
@UsePipes(new ValidationPipe({ exceptionFactory: (errors) => new WsException(errors) }))
@SubscribeMessage('events')
handleEvent(client, data) {
const event = 'events';
return { event, data };
}