카테고리 없음

Nestjs Pipe란

DevilFront 2022. 12. 22. 12:12
반응형

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);
    }

         

같은 빈 문자열로 보내보면

 

 

에러를 뱉는 걸 볼 수 있다. 

 

 

 

반응형