Paramètres de route
Fait partie de la section TypeScript et NestJS du Journey Node.js de Coddy. Leçon 4 sur 24.
Un client a souvent besoin d’une tâche, pas de la liste entière. Un chemin peut contenir un paramètre : une partie qui change d’une requête à l’autre.
@Get(':isbn')
findOne(@Param('isbn') isbn: string) {
return this.books.find((book) => book.isbn === isbn);
}:isbn correspond à n’importe quelle valeur à cet endroit du chemin, donc GET /books/978 appelle cette méthode. @Param('isbn') transmet cette valeur à la méthode. C’est toujours du texte : /books/42 donne la chaîne '42', jamais le nombre 42.
Si tu omets le nom, @Param() renvoie l’objet contenant tous les paramètres, { isbn: '978' }, au lieu de la valeur.
Défi
FacileUn client souhaite souvent obtenir une seule tâche, et non toute la liste. Ajoute une route qui renvoie une tâche à partir de son identifiant.
- Dans
src/tasks/tasks.controller.ts, ajoute une deuxième méthode àTasksController(appelle-lafindOne) pourGET /tasks/:id.:idreprésente n’importe quelle valeur à cet emplacement du chemin ;/tasks/2l’atteint donc. - Lis l’identifiant dans le chemin avec
@Param('id'). ImporteParamdepuis@nestjs/common. - L’identifiant arrive sous forme de texte, comme
"2", mais les identifiants dansthis.taskssont des nombres, et"2" === 2est faux. Convertis l’identifiant en nombre avant de le comparer. - Renvoie la tâche ayant cet identifiant.
- Laisse
GET /taskstel quel : il renvoie toujours la liste complète.
Essaie : envoie GET /tasks/2. Tu obtiens le code 200 et :
{ "id": 2, "title": "Fix the login bug", "done": false }Envoie aussi GET /tasks/1 et GET /tasks/3. Envoie ensuite GET /tasks/99. Aucune tâche n’a cet identifiant, donc ta méthode ne renvoie rien, et Nest répond avec le code 200 et un corps vide. C’est normal pour le moment. Cela ne donne aucune information au client, et une leçon ultérieure corrigera cela.
Essayez vous-même
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;
}
}
Toutes les leçons de TypeScript et NestJS
1Les bases de Nest
Classes et méthodesBonjour, NestEnregistrer un contrôleur4Gardes, filtres, intercepteurs
GardesEntraînez-vous par vous-même : Playground Express