NestJS) Pipe

BongHee·2023년 1월 24일
0

nest

목록 보기
2/2
post-thumbnail

Pipe란
@Injectable() 데코레이터로 주석이 달린 클래스
data transformation과 data validation을 위해 사용
파이프는 컨트롤러 경로 처리기에 의해 처리되는 인수에 의해 작동

  • 파이프는 메소드가 호출되기 직전에 파이프를 사입하고 파이프는 메소드로 향하는 인수를 수신하고 이에 대해 작동한다.

Data Transformation
: 입력 데이터를 원하는 형식으로 변환

Data validation
:입력 데이터를 평가하고 유효성 체크를 한다.

Pipe 사용 방법
1. Handler-level: usePipes()데코레이터 이용
2. Parameter-level
3. Global-level: 클라이언트에서 들어오는 모든 요청에 적용

  • Built-in Pipes
    : Nest JS에 기본적으로 사용할 수 있게 만들어 놓은 6가지 파이프
    ValidationPipe
    ParseIntPipe
    ParseArrayPipe
    등등..

Pipe를 이용한 유효성 체크

ex) 게시물 생성 시 유효성 체크

  • 필요한 모듈
    class-validator, class-transformer
//DTO파일
import { IsNotEmpty } from 'class-validator';

export class CreateBoardDto {
  @IsNotEmpty()
  title: string;

  @IsNotEmpty()
  description: string;
}


//controller
  @Post()
  @UsePipes(ValidationPipe)
  createBoard(@Body('title') createBoardDto: CreateBoardDto): Board {
    return this.boardsService.createBoard(createBoardDto);
  }

커스텀 파이프를 이용한 유효성 체크

  • PipeTransform: 인터페이스를 새롭게 만들 커스텀 파이프에 구현해줘야한다.
    transform()메소드를 필요하다. 이 메소드는 NestJS가 인자를 처리하기 위해 사용된다.

  • transform() 메소드
    : 두개의 파라미터를 갖는다.
    첫번째 파라미터는 처리가 된 인자의 값,
    두번째 파라미터는 인자에 대한 메타 데이터를 포함한 객체
    transform메소드에서 Return된 값은 Route 핸들러로 전해진다. 만약 예외가 발생하면 클라이언트에 바로 전해진다.

  • readonly class property
    : readonly는 속성을 읽기전용으로 만드는데 사용

profile
배움에 두려움이 없고 개발을 즐기는 사람

0개의 댓글