Nestjs Pipe란
Pipe란
-> @Injectable() 데코레이터로 주석이 달린 클래스
-> Data Transformation, Data Validation을 위해서 사용
-> 메소드가 호출되기 직전 ( 핸들러로 가기 전 ) 파이프를 삽입하고 파이프는 메소드(핸들러)로 향하는 인수를 수신하고 그에 대해 작동
클라이언트 -> 컨트롤러 @Get() 핸들러 -> Service. -> 컨트롤러 @Get() 핸들러 -> 클라이언트
// with Pipe
클라이언트 -> 파이프 -> 컨트롤러 @Get() 핸들러 -> Service. -> 컨트롤러 @Get() 핸들러 -> 클라이언트
Data Transformation ?
-> 데이터를 원하는 형식으로 변환
-> 숫자를 받길 원하는데 문자열로 온다면 자동으로 숫자로 바꿔준다.
EX) string '7' => Integer 7
Data Validation ?
-> 데이터를 평가하고 유효하다면 그 상태로 전달시키지만 유효하지 않다면 에러 발생
EX) 최소 1자리 에서 최대 10자리 필요 -> 전달받은 데이터: 'gimochi' -> OK
-> 전달받은 데이터: '' -> Error
Pipe는 3가지 방식으로 사용 할 수 있는데
1. 핸들러 파이프
2. 파라미터 파이프
3. 글로벌 파이프
핸들러 단 파이프를 이용해서 보드를 만드는 단계에서 파이프를 적용시켜보면
우선 파이프를 적용시키는데 필요한 패키지를 설치 해준다.
npm i class-validator class-transformer
title에 빈문자열을 넣었는데도 생성이 문제 없이 되었는데 이 부분을 체크해주는 파이프를 만드려면
// Create DTO
import { IsNotEmpty } from 'class-validator';
export class CreateBoardDto {
@IsNotEmpty()
title:string;
@IsNotEmpty()
description:string;
}
// 컨트롤러 보드 생성 핸들러 부분
@Post('/')
@UsePipes(ValidationPipe) // here
createBoard(
@Body() createBoardDto: CreateBoardDto,
) {
return this.boardService.createBoard(createBoardDto);
}
같은 빈 문자열로 보내보면
에러를 뱉는 걸 볼 수 있다.