Menu
CoddyTech

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 데코레이터만 런타임에 본문을 검사할 수 있습니다. 다음 강의에서 이를 다룹니다.

challenge icon

챌린지

쉬움
  • 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 {}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

TypeScript와 NestJS의 모든 레슨