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에서 더 많은 옵션 확인 가능
'STUDY > Node.js' 카테고리의 다른 글
NestJS | API 만들기 (1) - Repository (0) | 2021.08.04 |
---|---|
NestJS | 데이터베이스 연결, 설정 정보를 입력하는 다양한 방법... (database connection) (0) | 2021.07.28 |
NestJS | 프로젝트 생성 및 실행 (0) | 2021.07.22 |
Node.js | Oracle 연동 (npm oracledb) (0) | 2020.02.26 |
Node.js | nodemailer ejs사용하기 (이메일 인증번호) (0) | 2020.02.04 |