class-validator

박찬효·2023년 4월 24일
0

Class-validator

  • class-validator이란 joi의 Typescript버전으로, 데코레이터를 이용하여 편리하게 검증할 수 있는 라이브러리이다.

  • 서버로 들어오는 Json데이터의 검증을 할 때 유용하게 사용할 수 있다.

Class-validator 사용법

1. 다운 방법

$ npm i --save class-validator class-transformer 

2. 기본 사용법

  • 기본적으로 검증하고픈 파라미터 위에 데코레이터를 사용하면 검증할 수 있다.
@IsString()
  title: string;

  @IsString()
  content: string;

3. 사용되는 데코레이터

@IsString() 문자열인지 검증

@IsInt() Int값인지에 대한 검증

@IsBoolean() Boolean값인지에 대한 검증

@IsEmail() 이메일 형식인지에 대한 검증

@IsArray() 배열 값인지에 대한 검증

@IsEnum() Enum값인지에 대한 검증

@IsNumber() 숫자값인지에 대한 검증(소숫점도 검증 가능)

@IsDate() 날짜값인지에 대한 검증

@IsOptional() 값이 들어오지 않으면 검증을 안해도 된다는 데코레이터

@MaxLength() 최대 길이 제한

@MinLength() 최소 길이 제한

@Matches(RegExp('정규식'), {message : ""}) 정규표현식 입력 값을 검증할 때 사용 

@Min() 최솟값

@Max() 최댓값

[참고]

Nest.js에 적용하기

1. 특정 부분에만 적용

// Controller

  @UsePipes(new ValidationPipe({ transform: true }))
  @Post()
  async createBoard(@Body() createBoardDto: CreateBoardDto) {
    return await this.boardsService.createBoard(createBoardDto);
  }

2. 글로벌하게 적용

  • forbidNonWhitelisted : 이 옵션을 ture 시키면 DTO에 정의되지 않은 프로퍼티를 body에 넘길시 property 'xxx' should not exist라는 에러가 뜨게 된다.
    즉, dto에 정의 되지 않은 프로퍼티를 차단하기 위한 용도로 사용한다.

  • transform : 컨트롤러에서 id로 받는 값에 타입을 지정했다면 nest에서 자체적으로 타입을 변환하겠다는 옵션이다.

 // main
 
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,
    }),
  );
  await app.listen(3000);
}
bootstrap();
profile
개발자가 되기 위한 1인

0개의 댓글