목차
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 | 파일 업로드와 관련된 요청을 처리하고 검증 |