본문 바로가기
카테고리 없음

pipe

by 개발자doc 2024. 7. 10.
목차
1. 파이프란?
2. 어떻게 사용할까?
3. 내장 파이프의 종류
1. 파이프란

공식 문서에서 pipe를 다음과 같이 정의한다.

파이프는 PipeTransform 인터페이스를 구현하는 @Injectable() 데코레이터로 주석이 달린 클래스
 
일반적인 사용사례
  • 변환 :  입력 데이터를 원하는 형태로 변환
  • 유효성 검사 : 입력 데이터를 평가하고 유효하면 변경하지 않고 전달하고 예외를 전달한다.

nest는 메서드가 호출되기 전에 파이프를 삽입하고 인수를 받아 작동을 한다. 

 

2. 어떻게 사용할까?

검증과 변환을 하는 파이프는 어떻게 만들까?

import {PipeTransform, Controller,Get,Param} from '@nestjs/common';
class 파이프클래스 implements PipeTransform{
    transform(value:any, metadata:ArgumentMetadata){
        //데이터를 검증하는 로직
    }
}

@Controller()
class controller(){
     
     @Get("경로")
     findIndex(@Param("파리미터명",파이프클래스) index:number){
         // 컨트롤러 로직
     }
}

// ex) param이 정수형인지 검증

class ParamIntPipe implements PipeTransform{
    transform(value:any, metadata:ArgumentMetadata){
        // 값을 숫자로 변환할 수 없다면 
        if(isNaN(value)){
            // 에러발생
            throw new BaddRequest("param이 숫자가 아닙니다.");
        }
        return value;
    }
}

@Controller()
class controller(){
     
     @Get("/index")
     findIndex(@Param("index",ParamIntPipe) index:number){
         return index;
     }
}

실행 결과

3. 내장파이프의 종류

파이프는 직접 만들어 사용할 수 있지만 nestjs에서 기본 데이터 타입에 대한 내장파이프를 지원하고 있어 필요에 따라 가져다 사용할 수 있다.  

ValidationPipe DTO를 기반 유효성 검사
ParseIntPipe 문자열을 정수로 변환할 수 있는지 검증
ParseFloatPipe 문자열을 실수로 변환할 수 있는지 검증
ParseBoolPipe 문자열을 true/false로 변환할 수 있는지 검증
ParseArrayPipe 특정 필드를 배열로 파싱할 수 있는지 검증
ParseUUIDPipe 문자열을 UUID의 형태로 변환할 수 있는지 검증
ParseEnumPipe 요청 데이터를 열거형으로 변환할 수 있는지 검증
DefaultValuePipe 요청데이터가 없을 때 기본값을 지정
ParseFilePipe 파일 업로드와 관련된 요청을 처리하고 검증