Estoy tratando de enviar la excepción usando nestjs websocket según las condiciones, intenté usar
throw new WsException('Datos inválidos');
pero sin enviar ninguna excepción
Aquí está el código de ejemplo
import WebSocket from 'ws'; import { SubscribeMessage, WebSocketGateway, WsException, } from '@nestjs/websockets'; @WebSocketGateway({ path: '/api' }) export class MainGateway { @SubscribeMessage('message') handleMessage(client: WebSocket, payload: any) { if (payload.id === 4) { throw new WsException('Invalid Data'); } client.send(JSON.stringify({ id: payload.id })); } }y estoy creando la conexión usando angular aquí está el fragmento de código
export class WsComponent implements OnInit { public value!: number; public subject$ = webSocket('ws://localhost:3000/api'); ngOnInit(): void { const event = { event: 'message', data: { id: 4 } }; this.subject$.subscribe({ next: (v: any) => (this.value = v.id), error: (e) => console.error(e), complete: () => console.info('complete'), }); this.subject$.next(event); } }Por favor, ayúdame a resolver el problema.
He luchado con el mismo problema. Creo que el problema es con BaseWsExceptionFilter y su uso de soket.emit. He llegado a lo siguiente:
import { ArgumentsHost, Catch, HttpException } from "@nestjs/common"; import { BaseWsExceptionFilter, WsException } from "@nestjs/websockets"; @Catch(WsException, HttpException) export class WebsocketExceptionsFilter extends BaseWsExceptionFilter { catch(exception: WsException | HttpException, host: ArgumentsHost) { const client = host.switchToWs().getClient() as WebSocket; const data = host.switchToWs().getData(); const error = exception instanceof WsException ? exception.getError() : exception.getResponse(); const details = error instanceof Object ? { ...error } : { message: error }; client.send(JSON.stringify({ event: "error", data: { id: (client as any).id, rid: data.rid, ...details } })); } } Bastante seguro de que extends BaseWsExceptionFilter es redundante ya que no usé nada de esa clase. Y luego lo apliqué a mi puerta de enlace:
@WebSocketGateway() @UseFilters(WebsocketExceptionsFilter) @UsePipes(new ValidationPipe({ transform: true })) export class FeedGateway implements OnGatewayConnection, OnGatewayDisconnect { }Esto me ayudó a recibir el siguiente error:
{"event":"error","data":{"id":"7a784ce568767a1016090c6a","rid":"connect","statusCode":400,"message":["language must be a valid enum value"],"error":"Bad Request"}}