NestJS http로 들어오는 파라메타, 쿼리, Body값들에 대해서 Global Validation Pipe 만들기
안녕하세요. 이번에는 NestJS에서 클라이언트로 받는 값을 검증하고 변환하는 것을 전체(Global)에 적용하도록 하겠습니다.
일단 해당 npm 모듈을 설치해야 합니다.
$ npm i class-validator class-transformer @nestjs/mapped-types
설치가 완료된 다음 해당 app의 'useGloblePipes을 설정해 줍니다.
app.useGlobalPipes(
new ValidationPipe(),
);
/src/main.ts
위 코드를 'const app = await NestFactory.create(AppModule);'아래쪽에 추가를 해 줍니다.
'ValidationPipe는 '@nestjs/common'에서 import할수 있습니다.
이제 Input을 제어하기 위한 dto를 작성하겠습니다.
import { IsInt, IsString } from 'class-validator';
export class CreateAppDto {
@IsString()
readonly name: string;
@IsString()
readonly sex: string;
@IsInt()
readonly age: number;
}
/src/app.dto.ts
@IsString() : 위 데코레이터는 해당 name, sex에 string이 제대로 들어가는지를 확인한다
@IsInt() : 위 데코레이터는 해당 age에 number가 제대로 들어가는지 확인한다.
import { Body, Controller, Get, Post } from '@nestjs/common';
import { AppService } from './app.service';
import { CreateAppDto } from './appDto/app.dto';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get() // default로 작성된 Get코드
getHello(): string {
return this.appService.getHello();
}
@Post('validation')
checkBody(@Body() dto: CreateAppDto) {
return dto;
}
}
/src/app.controller.ts
이제 Post 메소드를 만들고 'RootURL/validation' 및 Body값을 넣어 확인한다.
사진1) Post요청에 따른 응답 |
사진2) 잘못된 Post 요청에 따른 응답 |
사진1,2와 같이 클라이언트의 바디값이 잘못되면 서버에서 자동으로 응답을 하게 되어있다. 사진2의 경우 클라이언트가 age 키값을 빠트려서 서버에서 잘못 됬다는 응답과 함께 수정을 요구하게 되 있다.
글로벌 파이프를 이용한 아주 기초적인 검증 방법이다. 이 외에도 여러개의 검증 방법이 있으니 공식문서를 참고하기 바랍니다.
댓글
댓글 쓰기