상세 컨텐츠

본문 제목

[TIL] 2024.03.07 Nest.Js Pipe

카테고리 없음

by 재호링 2024. 3. 7. 02:04

본문

파이프에는 두 가지 사례가 있음

  • 변환: 입력 데이터를 원하는 형식으로 변환 ex) 문자열에서 정수로
  • 유효성검사: 입력 데이터를 평가하고 유효한 경우 변경하지 않고 그대로 전달
    그렇지 않으면 예외 발생

위 와 같은 파이프는 컨트롤러 경로 핸들러에 의해 처리되는 작업을 수행

Nest는 메소드가 '호출' 되기 직전 파이프를 삽입함

파이프는 메소드에 대한 인수를 수신함

모든 변환 또는 유효성검사는 이 시점에서 수행

 

파이프는 종류도 많음 나만의 custom파이프를 만들기 가능

내장 파이프 

  • ValidationPipe
  • ParseIntPipe
  • ParseFloatPipe
  • ParseBoolPipe
  • ParseArrayPipe
  • ParseUUIDPipe
  • ParseEnumPipe
  • DefaultValuePipe
  • ParseFilePipe

위 파이프들은 @nestjs/common 패키지에서 내보냄

 

1 예제

 

바인딩 파이프 

 파이프 클래스의 인스턴스를 적절한 컨텍스트에 바인딩해야함 

 ParseIntPipe예에서는 파이프를 특정 경로 처리기 메서드와 연결하고 메서드가 호출되기 전에 파이프가 실행되는지 확인 메서드 매개 변수 수준에서 파이프를 바인딩하는 것으로 참조할 다음 구성을 사용하여 이를 수행 

@Get(':id')
async findOne(@Param('id', ParseIntPipe) id: number) {
  return this.catsService.findOne(id);
}

이렇게 하면 다음 두 가지 조건 중 하나가 충족됨

findOne()메서드에서 받는 매개 변수가 숫자 this.catsService.findOne()이거나 경로 핸들러가 호출되기 전에 예외가 발생

 

 

예를 들어 경로가 다음과 같이 호출된다고 가정하면

GET localhost:3000/abc

Nest는 다음과 같은 예외를 발생시킴

 

{
  "statusCode": 400,
  "message": "Validation failed (numeric string is expected)",
  "error": "Bad Request"
}

예외로 인해 메서드  findOne()실행되지 않음

위의 예에서는 인스턴스 ParseIntPipe가 아닌 클래스( )를 전달하여 인스턴스화에 대한 책임을 프레임워크에 맡기고

의존성 주입(DI)를 활성화함.

파이프 및 가드와 마찬가지로 대신 내부 인스턴스를 전달할 수 있음

옵션을 전달하여 내장 파이프의 동작을 사용자 정의하려는 경우 내부 인스턴스를 전달하는 것이 유용함