יצירת משימות
חלק מהיחידה TypeScript ו-NestJS במסלול ה-Node.js של Coddy. שיעור 6 מתוך 24.
לקוח שיוצר משימה שולח אותה כ-JSON בגוף הבקשה, וצריך לקבל בחזרה את המשימה שנשמרה.
@Post()
create(@Body() review: { stars: number }) {
this.reviews.push(review);
return review;
}@Post() ממפה את POST בנתיב של הבקר למתודה, ו-@Body() מעביר אליה את ה-JSON שפוענח. Nest קורא גופי JSON בעצמו, כך שאין צורך להוסיף express.json().
Nest משיב לבקשת POST עם 201 Created, הסטטוס שמציין שמשאב חדש נוצר, ולכל שיטה אחרת עם 200. הוספת @HttpCode(200) למתודה תשנה זאת; במקרה של יצירה, השאר זאת כך.
אתגר
קללקוחות צריכים להוסיף משימות, ולא רק לקרוא אותן. הוסיפו נתיב שיוצר משימה מתוך ה-JSON שהלקוח שולח.
- ב-
src/tasks/tasks.controller.ts, הוסיפו מתודה ל-TasksController(קראו להcreate) עבורPOST /tasks. סמנו אותה ב-@Post(), וקראו את גוף ה-JSON באמצעות@Body()בפרמטר שלה. שניהם מגיעים מ-@nestjs/common. - בנו את המשימה החדשה מתוך ה-
titleשל הגוף. תנו להidשאין לאף משימה אחרת: אחד יותר מהמזהה הגדול ביותר ב-this.tasks. משימה חדשה אף פעם אינה מושלמת, לכןdoneהואfalse. - הוסיפו את המשימה ל-
this.tasks, כדי ש-GET /tasksו-GET /tasks/:idימצאו אותה בהמשך. החזירו את המשימה החדשה. - אל תגדירו בעצמכם סטטוס. Nest משיב לבקשת POST עם 201 Created באופן אוטומטי.
נסו זאת: בחרו POST, נתיב /tasks, וגוף הבקשה { "title": "Buy milk" }. תקבלו 201 ואת:
{ "id": 4, "title": "Buy milk", "done": false }שלחו GET /tasks/4: אותה משימה. לאחר מכן שלחו POST עם גוף ריק, {}. עדיין אין בדיקה של הגוף, לכן עדיין תקבלו 201, עם משימה שאין לה כותרת: { "id": 5, "done": false }. פרק האימות מתקן זאת.
נסו בעצמכם
import { Controller, Get, Param, Query } from '@nestjs/common';
interface Task {
id: number;
title: string;
done: boolean;
}
@Controller('tasks')
export class TasksController {
private tasks: Task[] = [
{ id: 1, title: 'Write the README', done: true },
{ id: 2, title: 'Fix the login bug', done: false },
{ id: 3, title: 'Plan the sprint', done: false },
];
@Get()
findAll(@Query('done') done?: string): Task[] {
if (done === undefined) {
return this.tasks;
}
return this.tasks.filter((task) => task.done === (done === 'true'));
}
@Get(':id')
findOne(@Param('id') id: string): Task | undefined {
return this.tasks.find((task) => task.id === Number(id));
}
}
כל השיעורים ביחידה TypeScript ו-NestJS
1יסודות Nest
מחלקות ומתודותשלום, Nestרישום בקר4משמרים, מסננים ומיירטים
משמריםתרגלו בעצמכם: Express אונליין