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

תרגלו בעצמכם: Express אונליין