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.
Aufgabe
Einfach- Fülle
CreateTaskDtoindto/create-task.dto.tsaus: mit einemtitleund einem optionalendone. - Verwende es für den Body von
POST /tasks. Eine neue Aufgabe übernimmtdoneaus dem Body; fehlt der Wert, wirdfalseverwendet. - Sende
POST /tasksmit{ "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 {}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.