Pipe

이승준·2023년 11월 15일
0

Nest.js에서 Pipe는 HTTP 요청의 인자를 가공하거나 검증하는 데 사용되는 중간 처리기입니다.

대표적인 사용사례

  • 변환 : class-transform 라이브러리를 이용해 원하는 타입으로 변환할 수 있습니다.
  • 검증 : class-validator 라이브러리를 이용해 http 요청으로 들어온 인자를 검증할 수 있습니다.

빌트인 파이프

nestjs에서 기본적으로 제공하는 pipe입니다.

  • ValidationPipe
  • ParseIntPipe
  • ParseFloatPipe
  • ParseBoolPipe
  • ParseArrayPipe
  • ParseUUIDPipe
  • ParseEnumPipe
  • DefaultValuePipe
  • ParseFilePipe

공식문서 https://docs.nestjs.com/pipes

사용자정의 Pipe

import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';

@Injectable()
export class ValidationPipe implements PipeTransform {
  transform(value: any, metadata: ArgumentMetadata) {
    return value;
  }
}


export interface ArgumentMetadata {
  type: 'body' | 'query' | 'param' | 'custom';
  metatype?: Type<unknown>;
  data?: string;
}

와 같이 metadata의 형태를 보며 Pipe를 수정, 생성할 수 있습니다.

Pipe 사용범위 3가지

핸들러 수준 파이프

핸들러 수준 파이프는 특정 라우트 핸들러에만 적용됩니다. @UsePipes() 데코레이터를 사용하여 라우트 핸들러에 바인딩할 수 있습니다. 예를 들어 다음과 같이 작성할 수 있습니다.

@Get(':id')
@UsePipes(MyPipe)
async findOne(@Param('id') id: number) {
  return this.userService.findOne(id);
}

파라미터수준

파라미터 수준 파이프는 특정 파라미터에만 적용됩니다. @Param(), @Query(), @Body() 등의 데코레이터를 사용하여 파라미터에 바인딩할 수 있습니다. 예를 들어 다음과 같이 작성할 수 있습니다.

@Get(':id')
async findOne(@Param('id', MyPipe) id: number) {
  return this.userService.findOne(id);
}

전역수준
전역 수준 파이프는 애플리케이션의 모든 라우트 핸들러에 적용됩니다. app.useGlobalPipes() 메소드를 사용하여 전역적으로 바인딩할 수 있습니다. 예를 들어 다음과 같이 작성할 수 있습니다.

const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new MyPipe());
await app.listen(3000);

http 요청으로 들어오는 인자를 안정성있게 처리하는 기능!!

참조: https://develop-const.tistory.com/9

0개의 댓글