Routenparameter
Teil des Abschnitts TypeScript und NestJS der Node.js-Journey von Coddy. Lektion 4 von 24.
Ein Client benötigt oft eine einzelne Aufgabe und nicht die ganze Liste. Ein Pfad kann einen Parameter enthalten: einen Teil, der sich von Anfrage zu Anfrage ändert.
@Get(':isbn')
findOne(@Param('isbn') isbn: string) {
return this.books.find((book) => book.isbn === isbn);
}:isbn entspricht jedem Wert an dieser Stelle im Pfad, sodass GET /books/978 diese Methode aufruft. @Param('isbn') übergibt diesen Wert an die Methode. Er ist immer Text: /books/42 liefert die Zeichenfolge '42', niemals die Zahl 42.
Lässt du den Namen weg, liefert @Param() das Objekt mit allen Parametern, { isbn: '978' }, statt des Werts.
Aufgabe
EinfachEin Client möchte oft eine einzelne Aufgabe und nicht die ganze Liste. Füge eine Route hinzu, die eine Aufgabe anhand ihrer ID zurückgibt.
- Füge in
src/tasks/tasks.controller.tseine zweite Methode zuTasksControllerhinzu (nenne siefindOne) fürGET /tasks/:id.:idsteht für einen beliebigen Wert an dieser Stelle des Pfads, sodass/tasks/2diese Route erreicht. - Lies die ID mit
@Param('id')aus dem Pfad aus. ImportiereParamaus@nestjs/common. - Die ID kommt als Text an, etwa wie
"2", aber die IDs inthis.taskssind Zahlen, und"2" === 2ist false. Wandle die ID in eine Zahl um, bevor du sie vergleichst. - Gib die Aufgabe mit dieser ID zurück.
- Lass
GET /tasksunverändert: Es gibt weiterhin die ganze Liste zurück.
Probiere es aus: Sende GET /tasks/2. Du erhältst 200 und:
{ "id": 2, "title": "Fix the login bug", "done": false }Sende auch GET /tasks/1 und GET /tasks/3. Sende dann GET /tasks/99. Keine Aufgabe hat diese ID, daher gibt deine Methode nichts zurück, und Nest antwortet mit 200 und einem leeren Body. Das ist vorerst erwartungsgemäß. Der Client erhält dadurch keine Information, und eine spätere Lektion behebt das.
Probier es selbst
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;
}
}
Alle Lektionen in TypeScript und NestJS
1Nest-Grundlagen
Klassen und MethodenHallo, NestEinen Controller registrieren4Guards, Filter und Interceptors
GuardsÜbe selbstständig: Express-Playground