Parametry ścieżki
Część sekcji TypeScript i NestJS ścieżki Node.js w Coddy. Lekcja 4 z 24.
Klient często potrzebuje jednego zadania, a nie całej listy. Ścieżka może zawierać parametr: część, która zmienia się przy każdym żądaniu.
@Get(':isbn')
findOne(@Param('isbn') isbn: string) {
return this.books.find((book) => book.isbn === isbn);
}:isbn pasuje do dowolnej wartości w tym miejscu ścieżki, więc GET /books/978 trafia do tej metody. @Param('isbn') przekazuje tę wartość do metody. Zawsze jest to tekst: /books/42 daje ciąg znaków '42', nigdy liczbę 42.
Pomiń nazwę, a @Param() zwróci obiekt zawierający wszystkie parametry, { isbn: '978' }, zamiast samej wartości.
Wyzwanie
ŁatwyKlient często potrzebuje jednego zadania, a nie całej listy. Dodaj trasę, która zwraca jedno zadanie na podstawie jego identyfikatora.
- W pliku
src/tasks/tasks.controller.tsdodaj drugą metodę doTasksController(nazwij jąfindOne) dlaGET /tasks/:id.:idoznacza dowolną wartość w tym miejscu ścieżki, więc żądanie/tasks/2trafi do tej trasy. - Odczytaj identyfikator ze ścieżki za pomocą
@Param('id'). ZaimportujParamz@nestjs/common. - Identyfikator jest przekazywany jako tekst, na przykład
"2", ale identyfikatory wthis.taskssą liczbami, a"2" === 2ma wartość false. Zamień identyfikator na liczbę przed porównaniem. - Zwróć zadanie o tym identyfikatorze.
- Pozostaw
GET /tasksbez zmian: nadal zwraca całą listę.
Wypróbuj: wyślij żądanie GET /tasks/2. Otrzymasz kod 200 i:
{ "id": 2, "title": "Fix the login bug", "done": false }Wyślij też żądania GET /tasks/1 i GET /tasks/3. Następnie wyślij żądanie GET /tasks/99. Żadne zadanie nie ma tego identyfikatora, więc metoda nic nie zwraca, a Nest odpowiada kodem 200 i pustym treścią. Na razie jest to oczekiwane. Klient nie otrzymuje żadnej informacji, a późniejsza lekcja rozwiąże ten problem.
Spróbuj swoich sił
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;
}
}
Wszystkie lekcje w sekcji TypeScript i NestJS
1Podstawy Nest
Klasy i metodyWitaj, NestRejestrowanie kontrolera4Strażnicy, filtry i interceptory
StrażnicyPoćwicz samodzielnie: Edytor online Express