STUDY/Node.js
NestJS | 유효성 검사 validation
개미606
2021. 7. 23. 10:45
NestJS재밌다..
DTO클래스 생성
글 작성 요청시 사용하는 DTO를 만든다.
export class CreateRequestDto {
readonly title: string;
readonly author: string;
readonly regDate: Date;
}
아직 유효성 검사 처리가 되어있지 않아서, 아무런 값이나 요청해도 예외처리가 되지 않는다.
@Controller('boards')
export class BoradsController {
constructor(private readonly boardService: BoardService) {}
@Post()
create(@Body() createDto: CreateRequestDto) {
return this.boardService.create(createDto);
}
}
클래스 유효성 검사 라이브러리 설치
class-validator
와 class-transformer
를 사용하면 데코레이터 기반 유효성 검사가 가능하다.
$ npm i --save class-validator class-transformer
DTO 수정
데코레이터를 사용해서 유효성 검사
import { IsDate, IsString } from 'class-validator';
export class CreateRequestDto {
@IsString()
readonly title: string;
@IsString()
readonly author: string;
@IsDate()
readonly regDate: Date;
}
ValidationPipe 바인딩
@Body()
데코레이터에 ValidationPipe
를 바인딩하여 유효성 검사를 하도록 한다.ValidationPipe
는 매개변수, 메서드, 컨트롤러 그리고 전역에 바인딩할 수 있다. 아래는 매개변수에 바인딩
@Controller('boards')
export class BoradsController {
constructor(private readonly boardService: BoardService) {}
@Post()
create(@Body(new ValidationPipe()) createDto: CreateRequestDto) {
return this.boardService.create(createDto);
}
}
전역에 바인딩하고자 한다면, main.ts
에서 처리할 수 있다.app
에 useGlobalPipe
를 적용
// 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(),
);
await app.listen(3000);
}
bootstrap();
ValidationPipe
에는 여러 옵션을 설정할 수 있다.
whitelsit
: 유효성 검사 데코레이터를 사용하지 않는 값은 무시(제거)한다forbidNonWhitelisted
: 유효성 검사 데코레이드터를 사용하지 않는 값은 요청조차 불가, 바로 에러 응답 반환disableErrorMessage
: 기본으로 생성되는 에러 메시지를 클라이언트에게 반환하지 않음errorHttpStatusCode
: 특정 예외처리를 할 수 있음. 기본은BadRequestException
transform
: 일반 JavaScript객체로 들어오는 요청을 자동으로 DTO클래스로 변환
https://docs.nestjs.com/techniques/validation에서 더 많은 옵션 확인 가능