> For the complete documentation index, see [llms.txt](https://jakekwak.gitbook.io/nestjs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jakekwak.gitbook.io/nestjs/websockets/exception-filters.md).

# Exception filters

## Exception filters

[HTTP exception filter](https://app.gitbook.com/exception-filters) 레이어와 해당 웹 소켓 레이어의 유일한 차이점은 `HttpException`을 발생시키는 대신 `WsException`을 사용해야 한다는 것입니다.

```typescript
throw new WsException('Invalid credentials.');
```

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

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

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

## Filters

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

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

## Inheritance

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

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

```typescript
@@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);
  }
}
```

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