Routeur Express
Fait partie de la section Les bases d’Express du Journey Node.js de Coddy. Leçon 19 sur 23.
server.js contient maintenant des pages, des routes API et des intergiciels, et il continue de s’étoffer.
// routes/books.js
const router = express.Router();
router.get('/', (req, res) => res.json(books));
router.get('/:isbn', (req, res) => res.json(findBook(req.params.isbn)));
export default router;
// server.js
app.use('/api/books', booksRouter);express.Router() crée une petite application avec ses propres routes, conservées dans leur propre fichier. app.use('/api/books', booksRouter) la monte : la route / du routeur répond à GET /api/books, et sa route /:isbn répond à GET /api/books/9780141439518. Le préfixe est écrit une seule fois, dans app.use. Les erreurs levées à l’intérieur d’un routeur parviennent toujours au gestionnaire d’erreurs de l’application.
Le nouveau fichier routes/recipes.js contient déjà une route, /tags.
Défi
Facileserver.js ne cesse de grossir. Déplace l’API des recettes dans son propre fichier, routes/recipes.js, qui contient déjà une route listant toutes les étiquettes.
- Dans
routes/recipes.js, sous la route/tags, ajoute les quatre routes d’API deserver.js: la liste, une recette par id, la requête POST qui ajoute une recette et la route de mise à l’échelle. Dans un routeur, omets la partie/api/recipesde chaque chemin :/api/recipes/:iddevient/:id, et la liste devient/. - Garde-les sous
/tags. Express essaie les routes dans l’ordre, et/:idplacé en premier intercepterait/tagset chercherait une recette dont l’id esttags. - Supprime ces quatre routes de
server.js. - Dans
server.js, importe le routeur depuis./routes/recipes.jset monte-le sur/api/recipesavecapp.use, à l’endroit où se trouvaient les quatre routes : aprèsexpress.json()et avant le gestionnaire 404.
Essaie : appuie sur « Jouer » et envoie /api/recipes/tags. Tu devrais voir ["breakfast","dinner","soup","sweet","vegan"]. Envoie /api/recipes/2 : la recette Pancakes, comme avant. Envoie la requête POST {"title": "Toast"} à /api/recipes : statut 201. Ensuite, envoie /api/recipes/5/scale?by=2 : statut 500 et {"error":"Something went wrong"}, ce qui montre que les erreurs levées dans le routeur atteignent toujours ton gestionnaire d’erreurs. Les URL n’ont pas changé ; seul l’emplacement du code a changé.
Essayez vous-même
import express from 'express';
import { recipes } from '../data.js';
const router = express.Router();
// Chaque tag, une seule fois, par ordre alphabétique.
router.get('/tags', (req, res) => {
const tags = new Set(recipes.flatMap((recipe) => recipe.tags));
res.json([...tags].sort());
});
// Déplacez les routes /api/recipes de server.js ici, sous /tags.
// Dans un routeur, les chemins sont relatifs à l’endroit où il est monté.
export default router;
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Les bases d’Express
Entraînez-vous par vous-même : Playground Express