개발 공부/NestJS

예외 필터 Exception filter

2023. 3. 19. 09:53
목차
  1. Exception Filter
  2. Exception Filter 적용
  3. 메소드 레벨에서의 적용
  4. 컨트롤러 레벨에서의 적용
  5. 전역 레벨에서의 적용

Exception Filter

Nest에는 애플리케이션 전체에서 처리되지 않은 모든 예외를 처리하는 예외 계층이 내장되어 있습니다. 예외가 애플리케이션 코드에서 처리되지 않으면 이 계층에서 예외를 포착하여 적절한 사용자 친화적인 응답을 자동으로 전송합니다.

 

예외 계층을 완전히 제어하고 싶을 수도 있습니다. 예를 들어 로깅을 추가하거나 일부 동적 요인에 따라 다른 JSON 스키마를 사용하고 싶을 수 있습니다.

 

예외 필터는 바로 이러한 목적을 위해 설계되었습니다. 예외 필터를 사용하면 정확한 제어 흐름과 클라이언트에 다시 전송되는 응답의 내용을 제어할 수 있습니다.

 

import {
  ExceptionFilter,
  Catch,
  ArgumentsHost,
  HttpException,
} from '@nestjs/common';
import { Request, Response } from 'express';

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  catch(exception: HttpException, host: ArgumentsHost) {
    const ctx = host.switchToHttp();
    const response = ctx.getResponse<Response>();
    const request = ctx.getRequest<Request>();
    const status = exception.getStatus();
    const error = exception.getResponse();

    response.status(status).json({
      success: false,
      error,
      statusCode: status,
      timestamp: new Date().toISOString(),
      path: request.url,
    });
  }
}

exception을 통해 에러 객체에 접근할 수 있습니다.

 

Exception Filter 적용

메소드 레벨에서의 적용

  @Get()
  @UseFilters(HttpExceptionFilter)
  getAllCat() {
    throw new HttpException('api broken', 401);
    return 'all cats';
  }
  
  // cats.controller.ts

컨트롤러 레벨에서의 적용

@UseFilters(new HttpExceptionFilter())
export class CatsController {}

// cats.controller.ts

전역 레벨에서의 적용

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalFilters(new HttpExceptionFilter());
  await app.listen(3000);
}
bootstrap();

// main.ts

'개발 공부 > NestJS' 카테고리의 다른 글

Serialize 직렬화  (0) 2023.03.23
인터셉터 Interceptor  (0) 2023.03.19
파이프 Pipe  (0) 2023.03.19
미들웨어 Middleware  (0) 2023.03.19
Configuration  (0) 2023.03.12
  1. Exception Filter
  2. Exception Filter 적용
  3. 메소드 레벨에서의 적용
  4. 컨트롤러 레벨에서의 적용
  5. 전역 레벨에서의 적용
'개발 공부/NestJS' 카테고리의 다른 글
  • 인터셉터 Interceptor
  • 파이프 Pipe
  • 미들웨어 Middleware
  • Configuration
게으른 제이
게으른 제이
개발 관련 지식 및 다양한 정보들
게으른 제이
제이의 정보 블로그
게으른 제이
전체
오늘
어제
  • 분류 전체보기 (25)
    • 개발 공부 (22)
      • Node.js (1)
      • NestJS (10)
      • Docker (4)
      • 기타 (1)
      • Rust (1)
      • CS (4)
      • Flutter (1)
    • 기록 (2)
    • 정보 (1)
      • 일반 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Tool
  • error
  • flutter
  • Docker
  • Obsidian
  • Cache
  • redis
  • DART
  • CS
  • NestJS
  • LLM

최근 댓글

최근 글

hELLO · Designed By 정상우.
게으른 제이
예외 필터 Exception filter
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.