Parameter Rute
Termasuk bagian TypeScript dan NestJS dalam perjalanan Node.js di Coddy. Pelajaran 4 dari 24.
Client sering kali membutuhkan satu tugas, bukan seluruh list. Sebuah path dapat memuat parameter: bagian yang berubah dari satu permintaan ke permintaan lainnya.
@Get(':isbn')
findOne(@Param('isbn') isbn: string) {
return this.books.find((book) => book.isbn === isbn);
}:isbn cocok dengan nilai apa pun di bagian path tersebut, jadi GET /books/978 memanggil method ini. @Param('isbn') meneruskan nilai itu ke method. Nilai ini selalu berupa teks: /books/42 memberikan string '42', bukan angka 42.
Jika nama dihilangkan, @Param() memberikan object yang berisi setiap parameter, { isbn: '978' }, bukan nilainya.
Tantangan
MudahClient sering kali hanya menginginkan satu tugas, bukan seluruh daftar. Tambahkan rute yang mengembalikan satu tugas berdasarkan id-nya.
- Di
src/tasks/tasks.controller.ts, tambahkan metode kedua keTasksController(beri namafindOne) untukGET /tasks/:id.:idmewakili nilai apa pun pada bagian path tersebut, jadi/tasks/2akan mengaksesnya. - Baca id dari path dengan
@Param('id'). ImporParamdari@nestjs/common. - Id diterima sebagai teks, seperti
"2", tetapi id dithis.tasksberupa angka, dan"2" === 2bernilai false. Ubah id menjadi angka sebelum membandingkannya. - Kembalikan tugas dengan id tersebut.
- Biarkan
GET /tasksseperti semula: rute itu tetap mengembalikan seluruh daftar.
Coba: kirim GET /tasks/2. Kamu mendapat 200 dan:
{ "id": 2, "title": "Fix the login bug", "done": false }Kirim juga GET /tasks/1 dan GET /tasks/3. Lalu kirim GET /tasks/99. Tidak ada tugas dengan id tersebut, jadi metodemu tidak mengembalikan apa pun, dan Nest merespons dengan 200 dan isi kosong. Untuk saat ini, hasil itu memang diharapkan. Respons tersebut tidak memberi tahu apa pun kepada client, dan pelajaran berikutnya akan memperbaikinya.
Coba sendiri
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;
}
}
Semua pelajaran di TypeScript dan NestJS
1Dasar-Dasar Nest
class dan methodHalo, NestMendaftarkan Controller4Guard, Filter, dan Interceptor
GuardLatihan sendiri: Playground Express