Exception filters

Exception filters

HTTP exception filter 레이어와 해당 웹 소켓 레이어의 유일한 차이점은 HttpException을 발생시키는 대신 WsException을 사용해야 한다는 것입니다.

throw new WsException('Invalid credentials.');

info 힌트 WsException 클래스는@nestjs/websockets 패키지에서 가져옵니다.

Nest는 발생된 예외를 처리하고 결과적으로 다음과 같은 구조의 exception메시지를 생성합니다.

{
  status: 'error',
  message: 'Invalid credentials.'
}

Filters

맞춤 필터 기능도 지원되며 동일하게 작동합니다. 다음은 수동으로 인스턴스화된 메소드 범위 필터를 사용하는 예입니다 (클래스 범위도 작동).

@UseFilters(new WsExceptionFilter())
@SubscribeMessage('events')
onEvent(client, data: any): WsResponse<any> {
  const event = 'events';
  return { event, data };
}

Inheritance

일반적으로 응용 프로그램 요구 사항을 충족하도록 제작된 완전히 사용자 지정된 예외 필터를 만듭니다. 이미 구현 된 핵심 예외 필터를 재사용하고 특정 요인에 따라 동작을 재정의하려는 경우 사용 사례가 있을 수 있습니다.

예외 처리를 기본 필터에 위임하려면 BaseWsExceptionFilter를 확장하고 상속 된 catch()메소드를 호출해야합니다.

@@filename()
import { Catch, ArgumentsHost } from '@nestjs/common';
import { BaseWsExceptionFilter } from '@nestjs/websockets';

@Catch()
export class AllExceptionsFilter extends BaseWsExceptionFilter {
  catch(exception: unknown, host: ArgumentsHost) {
    super.catch(exception, host);
  }
}
@@switch
import { Catch } from '@nestjs/common';
import { BaseWsExceptionFilter } from '@nestjs/websockets';

@Catch()
export class AllExceptionsFilter extends BaseWsExceptionFilter {
  catch(exception, host) {
    super.catch(exception, host);
  }
}

분명히, 당신은 맞춤형 비즈니스 논리로 다양한 구현을 강화해야합니다 (예: 다양한 조건 추가).

Last updated