إنشاء المهام
جزء من قسم 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الحراس والمرشحات والمعترضات
الحراستدرّب بنفسك: Playground لـ Express