Pipe란
@Injectable() 데코레이터로 주석이 달린 클래스
data transformation과 data validation을 위해 사용
파이프는 컨트롤러 경로 처리기에 의해 처리되는 인수에 의해 작동
Data Transformation
: 입력 데이터를 원하는 형식으로 변환
Data validation
:입력 데이터를 평가하고 유효성 체크를 한다.
Pipe 사용 방법
1. Handler-level: usePipes()데코레이터 이용
2. Parameter-level
3. Global-level: 클라이언트에서 들어오는 모든 요청에 적용
Pipe를 이용한 유효성 체크
ex) 게시물 생성 시 유효성 체크
//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는 속성을 읽기전용으로 만드는데 사용