معلمات المسار
جزء من قسم TypeScript وNestJS في رحلة Node.js على Coddy. الدرس 4 من 24.
غالبًا ما يحتاج العميل إلى مهمة واحدة، لا إلى القائمة بأكملها. يمكن أن يحتوي المسار على معلمة: جزء يتغير من طلب إلى آخر.
@Get(':isbn')
findOne(@Param('isbn') isbn: string) {
return this.books.find((book) => book.isbn === isbn);
}يطابق :isbn أي قيمة في ذلك الموضع من المسار، لذا يصل GET /books/978 إلى هذه الطريقة. يمرر @Param('isbn') تلك القيمة إلى الطريقة. وتكون دائمًا نصًا: يعطي /books/42 السلسلة '42'، وليس العدد 42.
إذا حذفت الاسم، فإن @Param() يعطيك كائن جميع المعلمات، { isbn: '978' }، بدلًا من القيمة.
التحدي
سهلغالبًا ما يريد العميل مهمة واحدة، لا القائمة بأكملها. أضف مسارًا يعيد مهمة واحدة باستخدام معرّفها.
- في
src/tasks/tasks.controller.ts، أضف طريقة ثانية إلىTasksController(سمّهاfindOne) من أجلGET /tasks/:id. تشير:idإلى أي قيمة في ذلك الموضع من المسار، لذا يصل إليها/tasks/2. - اقرأ المعرّف من المسار باستخدام
@Param('id'). استوردParamمن@nestjs/common. - يصل المعرّف كنص، مثل
"2"، لكن المعرّفات فيthis.tasksأعداد، و"2" === 2تساوي false. حوّل المعرّف إلى عدد قبل المقارنة. - أعِد المهمة التي لها ذلك المعرّف.
- اترك
GET /tasksكما هو: ما زال يعيد القائمة بأكملها.
جرّب ذلك: أرسل GET /tasks/2. ستحصل على 200 وعلى:
{ "id": 2, "title": "Fix the login bug", "done": false }أرسل أيضًا GET /tasks/1 وGET /tasks/3. ثم أرسل GET /tasks/99. لا توجد مهمة بهذا المعرّف، لذا لا تعيد طريقتك شيئًا، ويردّ Nest برمز 200 وجسم فارغ. هذا متوقّع في الوقت الحالي. فهو لا يخبر العميل بأي شيء، وسيعالج درس لاحق ذلك.
جرّب بنفسك
import { Controller, Get } 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(): Task[] {
return this.tasks;
}
}
جميع دروس TypeScript وNestJS
1أساسيات Nest
الفئات والطرقمرحبًا بـ Nestتسجيل وحدة التحكم4الحراس والمرشحات والمعترضات
الحراستدرّب بنفسك: Playground لـ Express