DTOs
Parte da seção TypeScript e NestJS do Journey de Node.js da Coddy. Lição 13 de 24.
@Body() body: { title: string } descreve o corpo em um único lugar, e nada o verifica: { "title": 42 } passa diretamente. Um DTO, um objeto de transferência de dados, é uma classe que descreve o que o corpo de uma solicitação contém.
export class CreateOrderDto {
customer: string;
express?: boolean;
}
@Post()
create(@Body() dto: CreateOrderDto) {
return this.ordersService.create(dto);
}express? marca um campo opcional. O controlador e o serviço compartilham a classe, então concordam sobre a estrutura.
Um DTO é uma classe, não uma interface, por um motivo. As interfaces são removidas junto com os outros tipos quando o código é executado, enquanto uma classe continua existindo. A validação do Nest lê regras escritas como decoradores, e os decoradores precisam de uma classe. Essa é a próxima lição.
Desafio
FácilAgora os clientes podem criar uma tarefa que já esteja concluída. Descreva o corpo de POST /tasks com um DTO, uma classe que lista os campos contidos no corpo de uma solicitação, e passe-o até o serviço.
- Em
src/tasks/dto/create-task.dto.ts, dê à classeCreateTaskDtodois campos:title, uma string, edone, um booleano opcional. - Em
src/tasks/tasks.controller.ts, altere o métodocreate. O parâmetro@Body()agora tem o tipoCreateTaskDtoem vez de{ title: string }. Passe o DTO inteiro para o serviço, não apenas o título. - Em
src/tasks/tasks.service.ts, alterecreatepara receber o DTO em vez de um título. A nova tarefa obtém seutitledo DTO e também seudone, oufalsequando o corpo não tiverdone. O id ecreatedAtfuncionam como antes.
Experimente: envie por POST { "title": "Pay rent", "done": true } para /tasks. Você recebe 201 e a nova tarefa, concluída:
{ "id": 4, "title": "Pay rent", "done": true, "createdAt": "2026-10-30T09:15:00.000Z" }(createdAt mostra o horário da sua solicitação.) Envie por POST { "title": "Buy milk" }: 201 com "done": false. Em seguida, envie por POST { "title": 42 }. Você ainda recebe 201, com "title": 42 salvo: o DTO descreve o corpo, mas ainda não verifica nada. A próxima lição fará o Nest recusá-lo.
Experimente você mesmo
// Descreva o corpo de POST /tasks: um título e done quando o cliente o enviar.
export class CreateTaskDto {}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de TypeScript e NestJS
1Fundamentos do Nest
Classes e métodosOlá, NestRegistrando um controller4Guardas, filtros e interceptadores
GuardasPratique por conta própria: Playground de Express