Menu
CoddyTech

معلمات المسار

جزء من قسم 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' }، بدلًا من القيمة.

challenge icon

التحدي

سهل

غالبًا ما يريد العميل مهمة واحدة، لا القائمة بأكملها. أضف مسارًا يعيد مهمة واحدة باستخدام معرّفها.

  1. في src/tasks/tasks.controller.ts، أضف طريقة ثانية إلى TasksController (سمّها findOne) من أجل GET /tasks/:id. تشير :id إلى أي قيمة في ذلك الموضع من المسار، لذا يصل إليها /tasks/2.
  2. اقرأ المعرّف من المسار باستخدام @Param('id'). استورد Param من @nestjs/common.
  3. يصل المعرّف كنص، مثل "2"، لكن المعرّفات في this.tasks أعداد، و"2" === 2 تساوي false. حوّل المعرّف إلى عدد قبل المقارنة.
  4. أعِد المهمة التي لها ذلك المعرّف.
  5. اترك 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

تدرّب بنفسك: Playground لـ Express