DTO
Coddy Node.js 여정의 TypeScript와 NestJS 섹션에 포함된 레슨. 17개 중 10번째.
@Body() body: { title: string }는 본문을 한 곳에서만 설명하며, 이를 검사하는 것은 없습니다. { "title": 42 }는 그대로 전달됩니다. 데이터 전송 객체인 DTO는 요청 본문에 무엇이 들어 있는지 설명하는 클래스입니다.
export class CreateOrderDto {
customer: string;
express?: boolean;
}
@Post()
create(@Body() dto: CreateOrderDto) {
return this.ordersService.create(dto);
}express?는 선택적 필드를 나타냅니다. 컨트롤러와 서비스는 같은 클래스를 공유하므로 구조에 대해 서로 일치합니다.
DTO가 인터페이스가 아닌 클래스인 데에는 이유가 있습니다. 코드를 실행할 때 인터페이스는 다른 타입과 함께 제거되지만 클래스는 남아 있습니다. 그리고 클래스에 지정된 class-validator 데코레이터만 런타임에 본문을 검사할 수 있습니다. 다음 강의에서 이를 다룹니다.
챌린지
쉬움dto/create-task.dto.ts에서CreateTaskDto를 채우세요.title과 선택적done을 포함합니다.POST /tasks의 본문에 사용하세요. 새 작업은 본문에서done값을 가져오며, 이 값이 없으면false를 사용합니다.{ "title": "Pay rent", "done": true }를 포함해POST /tasks를 전송한 다음,{ "title": 42 }를 포함해 전송하세요.
직접 해보기
// POST /tasks의 본문을 설명합니다: title과 클라이언트가 전송하는 경우 done.
export class CreateTaskDto {}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.