DTO
Część sekcji TypeScript i NestJS ścieżki Node.js w Coddy. Lekcja 13 z 24.
@Body() body: { title: string } opisuje treść żądania tylko w jednym miejscu i nic jej nie sprawdza: { "title": 42 } przechodzi bezpośrednio. DTO, czyli obiekt transferu danych, to klasa opisująca zawartość treści żądania.
export class CreateOrderDto {
customer: string;
express?: boolean;
}
@Post()
create(@Body() dto: CreateOrderDto) {
return this.ordersService.create(dto);
}express? oznacza pole opcjonalne. Kontroler i usługa korzystają z tej samej klasy, więc mają zgodną strukturę.
DTO jest klasą, a nie interfejsem, z pewnego powodu. Interfejsy są usuwane wraz z innymi typami podczas uruchamiania kodu, natomiast klasa nadal istnieje. Walidacja w Nest odczytuje reguły zapisane jako dekoratory, a dekoratory wymagają klasy. Tym zajmiemy się w następnej lekcji.
Wyzwanie
ŁatwyKlienci mogą teraz utworzyć zadanie, które jest już wykonane. Opisz treść żądania POST /tasks za pomocą DTO, czyli klasy wymieniającej pola zawarte w treści żądania, i przekaż je aż do serwisu.
- W pliku
src/tasks/dto/create-task.dto.tsdodaj do klasyCreateTaskDtodwa pola:title, typu string, orazdone, opcjonalne pole typu boolean. - W pliku
src/tasks/tasks.controller.tszmień metodęcreate. Parametr@Body()ma teraz typCreateTaskDtozamiast{ title: string }. Przekaż do serwisu cały DTO, a nie tylko tytuł. - W pliku
src/tasks/tasks.service.tszmień metodęcreate, tak aby przyjmowała DTO zamiast tytułu. Nowe zadanie pobieratitlez DTO, a takżedonez DTO albofalse, jeśli treść żądania nie zawiera poladone. Id icreatedAtdziałają jak wcześniej.
Wypróbuj: wyślij POST { "title": "Pay rent", "done": true } na adres /tasks. Otrzymasz status 201 i nowe, wykonane zadanie:
{ "id": 4, "title": "Pay rent", "done": true, "createdAt": "2026-10-30T09:15:00.000Z" }(createdAt pokazuje czas wysłania żądania). Wyślij POST { "title": "Buy milk" }: otrzymasz status 201 z "done": false. Następnie wyślij POST { "title": 42 }. Nadal otrzymasz status 201, a wartość "title": 42 zostanie zapisana: DTO opisuje treść żądania, ale na razie niczego nie sprawdza. W następnej lekcji Nest odmówi przyjęcia takiego żądania.
Spróbuj swoich sił
// Opisz treść żądania POST /tasks: title oraz done, gdy klient je przesyła.
export class CreateTaskDto {}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji TypeScript i NestJS
Poćwicz samodzielnie: Edytor online Express