אובייקטי העברת נתונים (DTOs)
חלק מהיחידה TypeScript ו-NestJS במסלול ה-Node.js של Coddy. שיעור 10 מתוך 17.
@Body() body: { title: string } מתאר את גוף הבקשה במקום אחד בלבד, ושום דבר לא בודק אותו: { "title": 42 } עובר ישירות. DTO, אובייקט להעברת נתונים, הוא מחלקה שמתארת מה מכיל גוף בקשה.
export class CreateOrderDto {
customer: string;
express?: boolean;
}
@Post()
create(@Body() dto: CreateOrderDto) {
return this.ordersService.create(dto);
}express? מציין שדה אופציונלי. הבקר והשירות משתמשים באותה מחלקה, ולכן הם מסכימים על המבנה.
יש סיבה לכך ש-DTO הוא מחלקה ולא ממשק. ממשקים מוסרים יחד עם שאר הטיפוסים כשהקוד רץ, ואילו מחלקה עדיין קיימת, ורק קישוטי class-validator על מחלקה יכולים לבדוק גוף בקשה בזמן ריצה. זה הנושא של השיעור הבא.
אתגר
קל- מלאו את
CreateTaskDtoב-dto/create-task.dto.ts:title, ו-doneאופציונלי. - השתמשו בו עבור גוף הבקשה של
POST /tasks. משימה חדשה מקבלת אתdoneמגוף הבקשה, ואם הוא חסר — הערך הואfalse. - שלחו
POST /tasksעם{ "title": "Pay rent", "done": true }, ולאחר מכן עם{ "title": 42 }.
נסו בעצמכם
// תאר את גוף הבקשה של POST /tasks: כותרת, וגם done אם הלקוח שולח אותו.
export class CreateTaskDto {}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.