Class-validator
class-validator이란 joi의 Typescript버전으로, 데코레이터를 이용하여 편리하게 검증할 수 있는 라이브러리이다.
서버로 들어오는 Json데이터의 검증을 할 때 유용하게 사용할 수 있다.
Class-validator 사용법
$ npm i --save class-validator class-transformer
@IsString()
title: string;
@IsString()
content: string;
@IsString() 문자열인지 검증
@IsInt() Int값인지에 대한 검증
@IsBoolean() Boolean값인지에 대한 검증
@IsEmail() 이메일 형식인지에 대한 검증
@IsArray() 배열 값인지에 대한 검증
@IsEnum() Enum값인지에 대한 검증
@IsNumber() 숫자값인지에 대한 검증(소숫점도 검증 가능)
@IsDate() 날짜값인지에 대한 검증
@IsOptional() 값이 들어오지 않으면 검증을 안해도 된다는 데코레이터
@MaxLength() 최대 길이 제한
@MinLength() 최소 길이 제한
@Matches(RegExp('정규식'), {message : ""}) 정규표현식 입력 값을 검증할 때 사용
@Min() 최솟값
@Max() 최댓값
[참고]
Nest.js에 적용하기
// Controller
@UsePipes(new ValidationPipe({ transform: true }))
@Post()
async createBoard(@Body() createBoardDto: CreateBoardDto) {
return await this.boardsService.createBoard(createBoardDto);
}
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();