Menu
CoddyTech

Rota Parametreleri

Coddy'nin Node.js Journey'sinin TypeScript ve NestJS bölümünün bir parçası. Ders 4 / 24.

Bir istemcinin çoğu zaman tüm listeye değil, tek bir göreve ihtiyacı olur. Bir yol parametre içerebilir: istekten isteğe değişen bir bölüm.

@Get(':isbn')
findOne(@Param('isbn') isbn: string) {
    return this.books.find((book) => book.isbn === isbn);
}

:isbn, yolun o bölümündeki herhangi bir değerle eşleşir; bu nedenle GET /books/978 bu metoda ulaşır. @Param('isbn'), bu değeri metoda aktarır. Bu değer her zaman metindir: /books/42, sayı olan 42'yi değil, '42' metnini verir.

Adı belirtmezsen @Param(), değerin kendisi yerine tüm parametreleri içeren nesneyi verir: { isbn: '978' }.

challenge icon

Görev

Kolay

Bir istemci çoğu zaman listenin tamamını değil, tek bir görevi ister. Kimliğine göre tek bir görev döndüren bir rota ekle.

  1. src/tasks/tasks.controller.ts dosyasında, GET /tasks/:id için TasksController sınıfına ikinci bir yöntem ekle (adını findOne koy). :id, yolun o bölümündeki herhangi bir değeri temsil eder; bu nedenle /tasks/2 bu rotaya ulaşır.
  2. Kimliği yoldan @Param('id') ile oku. Param öğesini @nestjs/common içinden içe aktar.
  3. Kimlik, "2" gibi metin olarak gelir; ancak this.tasks içindeki kimlikler sayıdır ve "2" === 2 ifadesi false olur. Karşılaştırmadan önce kimliği sayıya dönüştür.
  4. Bu kimliğe sahip görevi döndür.
  5. GET /tasks rotasını olduğu gibi bırak: hâlâ listenin tamamını döndürüyor.

Dene: GET /tasks/2 isteğini gönder. 200 yanıtı ve şunu alırsın:

{ "id": 2, "title": "Fix the login bug", "done": false }

GET /tasks/1 ve GET /tasks/3 isteklerini de gönder. Ardından GET /tasks/99 isteğini gönder. Bu kimliğe sahip bir görev yok, bu nedenle yöntemin hiçbir şey döndürmez ve Nest 200 yanıtı ile boş bir gövde gönderir. Şimdilik beklenen davranış budur. İstemciye hiçbir bilgi vermez; bunu sonraki bir ders düzeltecek.

Kendin dene

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 ve NestJS bölümündeki tüm dersler

Kendi başına pratik yap: Express playground