Menu
CoddyTech

DTO

Часть раздела TypeScript и NestJS путешествия по Node.js на Coddy. Урок 10 из 17.

@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

Задание

Легко
  • Заполните CreateTaskDto в dto/create-task.dto.ts: укажите title и необязательное поле done.
  • Используйте его для тела запроса POST /tasks. Новая задача получает значение done из тела запроса, а если оно отсутствует — false.
  • Отправьте запрос POST /tasks с { "title": "Pay rent", "done": true }, а затем с { "title": 42 }.

Попробуйте сами

// Опишите тело запроса POST /tasks: title и done, если клиент передаёт его.
export class CreateTaskDto {}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела TypeScript и NestJS