Pipe
- 들어오는 요청 데이터를 변환하거나, 유효성 검사를하여 컨트롤로러 전달하기전에 데이터를 가공하는 기능을 수행한다.
- 들어오는 데이터의 유효성을 미리 검사하여 컨트롤러에서 불필요한 작업을 방지할수있다.
- 컨트롤러에 반복되는 유혀성 코드를 줄이고, 유효성 검사와 데이터 변환등의 공통 작업을 한곳에서 처리할수있다.
파이프 사용 범위
- Global Pipes:
- 애플리케이션 레벨의 파이프를 적용할떄 사용한다.
- 클라이언트에서 들어오는 모든 요청에 적용된다.
- Handler-level Pipes
- @usePipes()라는 데코레이터 사용
- 특정 핸들러 메서드에 적용할때 사용
- 핸들러 메소드에 적용되는 파이프로 매개변수에 적용하여 요청 데이터의 변환 또는 유혀성 검사를 수행한다.
- Parameter-level Pipes:
- @Param(),@Query, @Body 같은 데코레이터와 함께 사용하여 파라미터에 파이프를 적용한다.
- 특정 매개변수에 적용되는 파이프로 데이터 변환 또는 유효성 검사를 수행할 수 있다
https://jakekwak.gitbook.io/nestjs/overview/pipes
파이프에 필요한 모듈
class-validator
- 입력 데이터를 유효성 검사를 제공하는 라이브러리
- 참고) https://github.com/typestack/class-validator
class-transformer
- 데이터를 원하는 형식으로 변환하는 기능을 제공하는 라이브러리
- 참고) https://github.com/typestack/class-transformer
파이프에 필요한 모듈 설치
npm install class-validator class-transformer --save
Built-in Pipes Example
- 규칙 생성
import { IsNotEmpty } from 'class-validator';
...
/**단어 만들기 Request*/
export class CreateVocaBffRequest {
/**
* 영어 단어명
*
* example: word
*/
@IsNotEmpty()
word: string;
...
}
Custom Pipe Example
- PipeTransform를 implements받아서 구현
- transform()메소드
- 첫번쨰 인자(value) : 파이프가 변환할 값의 타입
- 두번째 인자(metadata: 요청과 관련된 메타데이터
- custom pipe 생성
import { ArgumentMetadata, PipeTransform } from '@nestjs/common';
...
export class VocaValidationPipe implements PipeTransform {
transform(value: Voca, metadata: ArgumentMetadata) {
...
return value;
}
}
- @UsePipes로 파이프 적용
// Built-in Pipe
@Post('/')
@UsePipes(ValidationPipe)
createVoca(
@Body() createVocaBffRequest: CreateVocaBffRequest,
): Promise<CreateVocaBffResponse> {
...
}
// Custom Pipe
@Post('/')
@UsePipesVocaValidationPipe)
createVoca(
@Body() createVocaBffRequest: CreateVocaBffRequest,
): Promise<CreateVocaBffResponse> {
...
}
'NestJS' 카테고리의 다른 글
[NestJS] Module, Controller, Service, Provider 란? Example (0) | 2023.07.16 |
---|---|
[Nest]NestJS란? Express 차이점, NestJS Start (0) | 2023.07.15 |