재학습/NestJS

[NestJS] DTO Validation Check & PartialType

재이든 2022. 12. 12. 23:50
반응형

 

  • NestJS로도 DTO Validation 체크가 가능하다

 

  • CreateDTO와 필드는 같지만, CreateDTO와 달리 모든 필드가 필수요소가 아닌 경우 PartialType으로 부분타입구현이 가능하다.

   - ex) UpdateDTO

Pipe

  • 유효성 검사용 파이프
  • 미들웨어
  1. install
  • npm install class-validator class-transformer

  2. main.ts > app.useGlobalPipes(new ValidationPipe());

import { ValidationPipe } from '@nestjs/common';
 import { NestFactory } from '@nestjs/core';
 import { AppModule } from './app.module';

 async function bootstrap() {
   const app = await NestFactory.create(AppModule);
   app.useGlobalPipes(new ValidationPipe(
     {
       whitelist : true,
       forbidNonWhitelisted : true,
       transform : true
     }
   ));

   await app.listen(3000);
 }
 bootstrap();

  3. DTO > @IsString() , @IsNumber(), @IsString({ each:true })

  • each옵션을 준 이유 => String[]이기 때문
import { IsNumber, IsString } from "class-validator";

 export class CreateMovieDto{
     @IsString()
     readonly title: string;
     @IsNumber()
     readonly year: number;
     @IsString({each:true})
     readonly genres: string[];

ValidationPipe

옵션

  1. WhiteList - true로 설정하면 아무 데코레이터도 없는 어떠한 property의 object를 거릅니다.
  • 데코레이터에 해당되지 않는 데이터는 Validator에 도달하지 않는다.

   2. forbidNonWhiteListed - true를 하면 리퀘스트 자체를 막음

  • Id가 String인 이유는, URL로 보낸 데이터는 전부 String이기 때문
  • 근데 Entity는 number니까.. 번환이슈가 생김
  • 그럴때 필요한게 transform 옵션

   3. rnasform - true를 하면 유저들이 보낸 데이터를 실제 타입으로 변환함

 

반응형

 

 


부분타입

  1. install
  • npm install @nestjs/mapped-types (타입을 변환시키고 사용할 수 있게하는 패키지)
  1. UpdateMovieDto > extends PartialType()
  2. 부분타입은 베이스타입이 필요하므로 extends PartialType(CreateMovieDto)
import { PartialType } from "@nestjs/mapped-types";
 import { CreateMovieDto } from "./create-movie.dto";


 export class UpdateMovieDto extends PartialType(CreateMovieDto){}

 

반응형