Menu
CoddyTech

DTOs

Teil des Abschnitts TypeScript und NestJS der Node.js-Journey von Coddy. Lektion 10 von 17.

@Body() body: { title: string } beschreibt den Body nur an einer Stelle, und nichts überprüft ihn: { "title": 42 } wird direkt durchgereicht. Ein DTO, ein Datenübertragungsobjekt, ist eine Klasse, die beschreibt, was ein Request-Body enthält.

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

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

express? kennzeichnet ein optionales Feld. Controller und Service verwenden dieselbe Klasse und sind sich dadurch über die Struktur einig.

Ein DTO ist aus gutem Grund eine Klasse und kein Interface. Interfaces werden zusammen mit den anderen Typen entfernt, wenn der Code ausgeführt wird, während eine Klasse weiterhin existiert. Außerdem können nur class-validator-Dekoratoren auf einer Klasse einen Body zur Laufzeit überprüfen. Darum geht es in der nächsten Lektion.

challenge icon

Aufgabe

Einfach
  • Fülle CreateTaskDto in dto/create-task.dto.ts aus: mit einem title und einem optionalen done.
  • Verwende es für den Body von POST /tasks. Eine neue Aufgabe übernimmt done aus dem Body; fehlt der Wert, wird false verwendet.
  • Sende POST /tasks mit { "title": "Pay rent", "done": true } und danach mit { "title": 42 }.

Probier es selbst

// Beschreibe den Body von POST /tasks: einen Titel und done, wenn der Client es mitsendet.
export class CreateTaskDto {}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in TypeScript und NestJS