Global Pipes, exception-filter

Global Pipes, exception-filter

카테고리
Nest.js
날짜
작성자
JeongjungsikJeongjungsik
태그

라이프 사이클

nestjs엔 request 라이프 사이클이라는게 존재한다.
(대충 이런 사이클…)
notion image
 
위의 이미지에서
Global Pipes와 exception-filter의 사용예시를 다뤄보려고 한다.
 

Global Pipes

파이프형식으로 설정하며, 전역적으로 데이터 검증을 할 수 있게 설정해줄 수 있다.
해당 데이터를 검증하여 조건을 충족하지 못할 시 에러를 뱉어준다.

예시

  • 파이프를 세팅해주고,
// main.ts import { ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); // req요청을 보낼 때 이 파이프(여기서는 데이터 검증용)를 거치고 리졸버(혹은 컨트롤러)로 요청이 감 app.useGlobalPipes( new ValidationPipe({ disableErrorMessages: true, }), ); await app.listen(3000); } bootstrap();
 
 
  • @Min() 처럼 사용해 줄 수 있다.
// create-product.input.ts import { Field, InputType, Int } from '@nestjs/graphql'; import { Min } from 'class-validator'; @InputType() export class CreateProductInput { @Field(() => String) name: string; @Field(() => String) description: string; @Min(0) // 0아래로는 값이 못들어온다는 validator @Field(() => Int) price: number; }
 

exception-filter

  • 전역적으로 에러 설정을 해준다.
 

예시

 
import { Catch, ExceptionFilter, HttpException } from '@nestjs/common'; @Catch(HttpException) // 이제부터 HttpException 에러나면 이 함수를 실행시켜줘야돼 라는 뜻으로 이거 작성 export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException) { const status = exception.getStatus(); const message = exception.message; console.log('================='); console.log('예외가 발생했어요!'); console.log('예외 내용:', message); console.log('예외 코드:', status); console.log('================='); } }
 
// main.ts import { ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { HttpExceptionFilter } from './commons/filter/http-exception.filter'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalPipes( new ValidationPipe({ disableErrorMessages: true, }), ); // 이부분임. app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(3000); } bootstrap();

댓글

guest