본문 바로가기

Learning/NestJS

DTO (Data Transfer Object)

입력받는 데이터를 검증하기

 

main.ts에 파이프 추가

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,        //dto 정의된 타입외 값은 허용하지 않는다.
      forbidNonWhitelisted:true,  //정해진 필드가 아닌 경우 에러를 보낸다.
      transform:true,   //데이터를 받아서 넘겨줄때 자동으로 타입을 변환해준다.
    })
  );
  await app.listen(3333);
}
bootstrap();

검증을 위한 도구를 설치

npm i --save class-validator class-transformer

dto파일 생성

import { IsDate, IsEmail, IsOptional, IsString } from 'class-validator';

export class CreateMemberDto{

    @IsString()    //입력받는 값이 문자형
    readonly TYPE: string;

    @IsString()
    readonly NAME: string;  

    @IsString()
    readonly PASSWORD: string;

    @IsOptional()   //필수로 입력 받지 않아도 됨
    @IsString()
    @IsEmail()      // 이메일 형식인지 검증
    readonly EMAIL: string;

    @IsString()
    readonly LOGIN_ID: string;

    @IsOptional()
    @IsDate()      // 날짜형인지 검증
    readonly CREATE_DATE_TIME: Date;
}

 

각각의 데코레이션 옵션들은 깃허브에서 확인 가능

github.com/typestack/class-validator#usage

 

typestack/class-validator

Decorator-based property validation for classes. Contribute to typestack/class-validator development by creating an account on GitHub.

github.com

Controcontroller 에서 입력받는 @Body의 타입을 생성산 dto class로 지정하여 service로 보냄

@Body() registerCreateMemberDto

 

service에서 받아오는 부분도 수정

addMember(registerCreateMemberDto)

 

니콜라스 강좌에서 @nestjs/mapped-types 에 대한 내용도 나오는데

원본dto를 import하고 PartialType를 사용하여 상속 받아 class를 생성하면

export class 업데이트dto extends PartialType(원본dto) {}

원본dto의 모든 속성이 선택적으로 사용해도 된다.

 

'Learning > NestJS' 카테고리의 다른 글

NestJS Authentication(4) jwt(수정)  (0) 2021.01.11
NestJS Authentication(3) 환경변수  (0) 2021.01.07
NestJS Authentication(2) jwt+환경변수  (0) 2021.01.06
NestJS Authentication(1) Login  (0) 2021.01.03
NestJS 시작 하다  (0) 2021.01.01