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 키값을 빠트려서 서버에서 잘못 됬다는 응답과 함께 수정을 요구하게 되 있다. 

글로벌 파이프를 이용한 아주 기초적인 검증 방법이다. 이 외에도 여러개의 검증 방법이 있으니 공식문서를 참고하기 바랍니다.

댓글

이 블로그의 인기 게시물

DAQ로 전압 측정하기-2

Nest JS URL에 있는 쿼리(Query) 읽기

appendChild를 이용하여
  • 늘리기_JavaScript_2번