사실 Nest.js가 아니라 객체지항 언어에 대한 내용이고, 스프링에서도 이용했지만 Nest쪽으로 기술했다.
DTO란?
DTO를 쓰는이유:
클래스파일을 쓰는이유:클래스는 인터페이스와 다르게 런타임에서 작동하기 떄문에 파이브 같은 기능을 이용할 때 더 유용하다.
export class BoardDto {
title: string;
description: string;
}
이제 컨트롤러와 서비스에서 BoardDto를 주입한다.
컨트롤러
@Post()
createBoard(@Body() boardDto: BoardDto): Board {
return this.boardService.createBoard(boardDto);
}
서비스
createBoard(boardDto: BoardDto): Board {
const { title, description } = boardDto;
const board: Board = {
id: uuid(),
title,
description,
status: BoardStatus.PUBLIC,
};
this.boards.push(board);
그후 Pipe를 이용하여 유효성 검사를 한다
Validation를 사용하기 위해 패키지를 설치한다
$ npm i class-validator class-transformer
main.ts
app.useGlobalPipes(new ValidationPipe())
자세한 옵션은 공식문서에서 확인할 수 있다.
그 후 DTO파일에서 데코레이터로 Validation 유효성 검사를 해준다.
import { IsString } from 'class-validator'
export class BoardDto {
@IsString()
title: string;
@IsString()
description: string;
}