Menu
CoddyTech

DTO'lar

Coddy'nin Node.js Journey'sinin TypeScript ve NestJS bölümünün bir parçası. Ders 13 / 24.

@Body() body: { title: string } gövdeyi yalnızca tek bir yerde tanımlar ve hiçbir şey onu denetlemez: { "title": 42 } doğrudan geçer. DTO, yani veri aktarım nesnesi, istek gövdesinin neler içerdiğini tanımlayan bir sınıftır.

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

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

express? isteğe bağlı bir alanı belirtir. Denetleyici ve hizmet bu sınıfı paylaşır, böylece alanların yapısı konusunda anlaşırlar.

DTO'nun bir arayüz değil, sınıf olmasının bir nedeni vardır. Kod çalıştırıldığında arayüzler diğer türlerle birlikte kaldırılırken sınıf varlığını sürdürür. Nest'in doğrulaması, dekoratörlerle yazılmış kuralları okur ve dekoratörler bir sınıfa ihtiyaç duyar. Bu, sonraki derstir.

challenge icon

Görev

Kolay

İstemciler artık tamamlanmış bir görev oluşturabilir. POST /tasks isteğinin gövdesini bir DTO ile tanımlayın; DTO, istek gövdesinin içerdiği alanları listeleyen bir sınıftır. Ardından DTO'yu servis katmanına kadar iletin.

  1. src/tasks/dto/create-task.dto.ts dosyasında CreateTaskDto sınıfına iki alan ekleyin: bir metin olan title ve isteğe bağlı bir boolean olan done.
  2. src/tasks/tasks.controller.ts dosyasında create metodunu değiştirin. Metodun @Body() parametresinin türü artık { title: string } yerine CreateTaskDto olmalı. Servise yalnızca başlığı değil, DTO'nun tamamını iletin.
  3. src/tasks/tasks.service.ts dosyasında create metodunu başlık yerine DTO alacak şekilde değiştirin. Yeni görev, title değerini DTO'dan, done değerini de DTO'dan almalı; gövdede done yoksa false olmalı. Kimlik ve createdAt önceden olduğu gibi çalışır.

Deneyin: /tasks adresine { "title": "Pay rent", "done": true } ile POST isteği gönderin. 201 yanıtı ve tamamlanmış yeni görev döner:

{ "id": 4, "title": "Pay rent", "done": true, "createdAt": "2026-10-30T09:15:00.000Z" }

(createdAt, isteğinizin yapıldığı zamanı gösterir.) { "title": "Buy milk" } ile POST isteği gönderin: "done": false ile birlikte 201 yanıtı alırsınız. Ardından { "title": 42 } ile POST isteği gönderin. Yine 201 yanıtı alırsınız ve "title": 42 kaydedilir: DTO gövdeyi tanımlar ancak henüz hiçbir şeyi denetlemez. Sonraki derste Nest bu isteği reddedecek.

Kendin dene

// POST /tasks isteğinin gövdesini tanımlayın: bir title ve istemci gönderirse done.
export class CreateTaskDto {}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

TypeScript ve NestJS bölümündeki tüm dersler

Kendi başına pratik yap: Express playground