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 на классе могут проверять тело запроса во время выполнения. Об этом — в следующем уроке.
Задание
Легко- Заполните
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 {}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.