오히려 좋아..

상황이 나쁘게만 흘러가는 것 같을 때 외쳐보자.. .

궁금한 마음으로 포트폴리오 보기

Web Programming/NestJS

[NestJS] DTO(Data Transfer Object)를 이용한 Validation

junha6316 2022. 2. 3. 09:19
npm install --save class-validator class-transformer

 

파이프 라인 설정

// main.ts

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

async function bootstrap() {
  console.log(process.env.NODE_ENV);
  const app = await NestFactory.create(AppModule, {
    logger: ['log'],
  });
  
  // 글로벌 파이프 설정
  app.useGlobalPipes(new ValidationPipe());

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

 

 

dto 작성

import {
  IsIn,
  IsOptional,
  IsString,
  MinLength,
  Matches,
} from 'class-validator';
import { Transform } from 'class-transformer';

export class CreateSomethingDto {
  @IsString()
  @IsOptional()
  userId: string;


  @IsString()
  @Transform(({ value }) => value.trim()) // 양 옆의 공백을 자른 값을 사용한다.
  @MinLength(5)
  content: string;

  @IsIn(['apple', 'orange', 'pineapple']) // 선택지
  @IsString()
  choice: string;

}

 

컨트롤러에 적용

  @Get('/test')
  @HttpCode(200)
  @UsePipes(new ValidationPipe()) // global 하게 사용하고 싶지 않을 때 해당 데코레이터를 추가한다.
  testEndPoint(@Request() request, @Body body: CreateSomethingDto) {
	// body 타입을 위와 같이 설정해주면 자동으로 유효성 검사를 수행해 유효하지않으면 400을 반환한다.

    return {
      statusCode: 200
    }
  }