Tech Blog of Pinomaker
Published 2022. 11. 14. 13:47
[Nest JS] 파이프(Pipe) B.E/Nest JS

Pipe

요청이 라우터 핸들러로 전달되기 전에 요청 객체를 변환할 수 있는 기회를 제공한다.

 

파이프는 주로 변환과 유효성 검사를 위하여 사용 된다.

 

  • 변환(Transformatiion) : 입력 데이터를 원하는 형식으로 변환
  • 유효성 검사(Validation) : 입력 데이터를 사용자가 정한 기준에 유효하지 않은 경우 예외 처리

 

 

@nest/common Module에는 내장 파이프가 마련 되어 있다.

  • ValidationPipe
  • ParseIntPipe
  • ParseBoolPipe
  • ParseArrayPipe
  • ParseUUIDPipe
  • DefaultValuePipe

 

 

그 중 ParseIntPipe, ParseBoolPipe, ParseArrayPipe, ParseUUIDPipe는 전달된 인자의 타입을 검사하는 용도로 사용 되는 데, /board/:id에 요청된 파라미터 id는 타입이 string인데, 이를 내부에서 number로 사용하고 있었다면 Controller나 Service등 에서 이를 string으로 변환해서 사용해야하는 불필요한 중복 코드를 작성하게 되는 데, 아래 코드와 같이 작성하면 파이프를 이용해 바인딩 할 수 있다.

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

// param id는 string이지만, ParseIntPipe를 이용하여 number로 변환

 

 

DefaultValuePipe는 인자의 값에 기본 값을 설정할 수 있으며, 쿼리 파라미터가 생략된 경우 사용된다. 

아래의 예시는 유저 목록을 조회할 때 쿼리 파라미터로 offset와 limit를 받아야하는 데, DefaultValuePipe로 생략될 경우를 대비하여 기본 값을 설정 하였다.

@Get()
findAll(
  @Query('offset', new DefaultValuePipe(0), ParseIntPipe) offset: number,
  @Query('limit', new DefaultValuePipe(10), ParseIntPipe) limit: number,
) {
  console.log(offset, limit);

  return this.usersService.findAll();
}
profile

Tech Blog of Pinomaker

@pinomaker

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!