[NestJS] 파이프

이재훈·2023년 5월 29일
0

NestJs

목록 보기
7/8

파이프

파이프는 파이프 변환 인터페이스를 구현하는 @Injectable() 데코레이터가 달린 클래스 입니다.

파이프에는 두 가지 일반적인 사용 사례가 있습니다.

  • 변환: 입력 데이터를 원하는 형식으로 변환(예: 문자열에서 정수로)
  • validation: 입력 데이터를 평가하고 유효한 경우 변경되지 않은 상태로 전달합니다. 그렇지 않으면 throw 합니다.

두 경우 모두 파이프는 컨트롤러 라우트 핸들러 arguments에서 처리중인 상태에서 작동합니다. Nest는 메소드가 호출되기 직전에 파이프를 삽입하고 파이프는 메소드로 향하는 인수를 수신하고 작동합니다. 모든 변환과 유효성 검사는 그 시간에 발생하며 그 후에 컨트롤러에 변환된 인수와 함께 호출됩니다.

먼저 컨트롤러에서 @Param()을 사용하여 값을 받아보겠습니다.

catsController

  // cats/:id
  @Get(':id')
  getOneCat(@Param() param) {
    console.log(param);
    return 'one cat';
  }


호출이 잘 되었습니다. 콘솔에 로그를 확인해 보겠습니다.

json 객체로 콘솔 로그가 남습니다. 여기서 명확하게 id를 준다면?
dog가 콘솔 로그에 남게 됩니다.

 // cats/:id
  @Get(':id')
  getOneCat(@Param('id') param) {
    console.log(param);
    console.log(typeof param);
    return 'one cat';
  }

// dog 
// string

여기에 typeof로 param의 타입을 출력해보았습니다. string이 나옵니다.
이 값을 파이프를 사용하여 number로 변환해보도록 하겠습니다.

빌트인 파이프

Nest는 즉시 사용할 수 있는 9개의 파이프와 함께 제공됩니다.

  • ValidationPipe
  • ParseIntPipe
  • ParseFloatPipe
  • ParesBoolPipe
  • ParseArrayPipe
  • ParseUUIDPipe
  • ParesEnumPipe
  • DefaultValuePipe
  • ParseFilePipe
    @nestjs/common 패키지에 포함되어 있습니다.

변환 사용 시 변환에 실패하면 예외를 발생시킵니다.

바인딩 파이프

파이프를 사용하려면 파이프 클래스의 인스턴스를 적절한 컨텍스트에 바인딩해야 합니다.

  // cats/:id
  @Get(':id')
  getOneCat(@Param('id', ParseIntPipe) param: number) {
    console.log(param);
    return 'one cat';
  }
// 123123

ParseIntPipe를 사용하여 id는 number 타입만 들어올 수 있게 하였습니다.
localhost:8000/cats/123123 를 호출했을 때 123123이 잘 출력되는 것을 확인할 수 있습니다. 만약 number type이 아닌 'catking'을 넣어보도록 하겠습니다.

변환 하는 과정에서 exception이 발생하였기 때문에 콘솔 로그에는 아무것도 남지 않고, 전역 filter로 설정한 HttpExceptionFilter를 거쳐서 응답하는 것을 확인할 수 있습니다.


해당 게시글은 "NestJS 공식 홈페이지"
인프런 강의 "탄탄한 백엔드 NestJS, 기초부터 심화까지(윤상석)"을 참고하여 만들었습니다.

profile
부족함을 인정하고 노력하자

0개의 댓글