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.
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.
src/tasks/dto/create-task.dto.tsdosyasındaCreateTaskDtosınıfına iki alan ekleyin: bir metin olantitleve isteğe bağlı bir boolean olandone.src/tasks/tasks.controller.tsdosyasındacreatemetodunu değiştirin. Metodun@Body()parametresinin türü artık{ title: string }yerineCreateTaskDtoolmalı. Servise yalnızca başlığı değil, DTO'nun tamamını iletin.src/tasks/tasks.service.tsdosyasındacreatemetodunu başlık yerine DTO alacak şekilde değiştirin. Yeni görev,titledeğerini DTO'dan,donedeğerini de DTO'dan almalı; gövdededoneyoksafalseolmalı. Kimlik vecreatedAtö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 {}
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
1Nest Temelleri
Sınıflar ve MetotlarMerhaba, NestBir Controller Kaydetme4Guard’lar, Filtreler, Interceptor’lar
Guard’larKendi başına pratik yap: Express playground