DTOs
Fa parte della sezione TypeScript e NestJS del percorso Node.js di Coddy. Lezione 13 di 24.
@Body() body: { title: string } descrive il corpo in un solo punto, senza che venga effettuato alcun controllo: { "title": 42 } passa direttamente. Un DTO, ovvero un oggetto di trasferimento dei dati, è una classe che descrive cosa contiene il corpo di una richiesta.
export class CreateOrderDto {
customer: string;
express?: boolean;
}
@Post()
create(@Body() dto: CreateOrderDto) {
return this.ordersService.create(dto);
}express? indica un campo facoltativo. Il controller e il servizio condividono la classe, quindi concordano sulla struttura.
Un DTO è una classe, non un'interfaccia, per una ragione. Le interfacce vengono rimosse insieme agli altri tipi quando il codice viene eseguito, mentre una classe continua a esistere. Il sistema di convalida di Nest legge le regole scritte come decoratori, e i decoratori richiedono una classe. Questo è l'argomento della prossima lezione.
Sfida
FacileI client ora possono creare un'attività già completata. Descrivi il corpo di POST /tasks con un DTO, una classe che elenca i campi contenuti nel corpo di una richiesta, e passalo fino al servizio.
- In
src/tasks/dto/create-task.dto.ts, assegna alla classeCreateTaskDtodue campi:title, una stringa, edone, un booleano facoltativo. - In
src/tasks/tasks.controller.ts, modifica il metodocreate. Il suo parametro@Body()ora ha il tipoCreateTaskDtoanziché{ title: string }. Passa l'intero DTO al servizio, non solo il titolo. - In
src/tasks/tasks.service.ts, modificacreatein modo che accetti il DTO anziché un titolo. La nuova attività ottiene il suotitledal DTO e anche il suodonedal DTO, oppurefalsequando il corpo non contienedone. L'id ecreatedAtfunzionano come prima.
Prova: invia con POST { "title": "Pay rent", "done": true } a /tasks. Ottieni 201 e la nuova attività, completata:
{ "id": 4, "title": "Pay rent", "done": true, "createdAt": "2026-10-30T09:15:00.000Z" }(createdAt mostra l'ora della tua richiesta.) Invia con POST { "title": "Buy milk" }: 201 con "done": false. Poi invia con POST { "title": 42 }. Ottieni comunque 201, con "title": 42 salvato: il DTO descrive il corpo, ma per ora non controlla nulla. La lezione successiva farà in modo che Nest lo rifiuti.
Provalo tu
// Descrivi il corpo di POST /tasks: un titolo e done quando il client lo invia.
export class CreateTaskDto {}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di TypeScript e NestJS
Esercitati da solo: Playground Express