Menu
CoddyTech

DTOs

Fait partie de la section TypeScript et NestJS du Journey Node.js de Coddy. Leçon 10 sur 17.

@Body() body: { title: string } décrit le corps à un seul endroit, et rien ne le vérifie : { "title": 42 } passe directement. Un DTO, ou objet de transfert de données, est une classe qui décrit le contenu du corps d’une requête.

export class CreateOrderDto {
    customer: string;
    express?: boolean;
}

@Post()
create(@Body() dto: CreateOrderDto) {
    return this.ordersService.create(dto);
}

express? indique un champ facultatif. Le contrôleur et le service partagent la classe, ils s’accordent donc sur la structure.

Un DTO est une classe, et non une interface, pour une raison précise. Les interfaces sont supprimées avec les autres types à l’exécution du code, tandis qu’une classe existe toujours, et seuls les décorateurs class-validator appliqués à une classe peuvent vérifier un corps à l’exécution. C’est le sujet de la prochaine leçon.

challenge icon

Défi

Facile
  • Renseignez CreateTaskDto dans dto/create-task.dto.ts : un title et un done facultatif.
  • Utilisez-le pour le corps de POST /tasks. Une nouvelle tâche prend la valeur de done dans le corps, ou false si elle est absente.
  • Envoyez POST /tasks avec { "title": "Pay rent", "done": true }, puis avec { "title": 42 }.

Essayez vous-même

// Décrivez le corps de POST /tasks : un titre et done lorsque le client l’envoie.
export class CreateTaskDto {}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de TypeScript et NestJS