Menu
CoddyTech

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.

challenge icon

Défi

Facile

server.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.

  1. Dans routes/recipes.js, sous la route /tags, ajoute les quatre routes d’API de server.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/recipes de chaque chemin : /api/recipes/:id devient /:id, et la liste devient /.
  2. Garde-les sous /tags. Express essaie les routes dans l’ordre, et /:id placé en premier intercepterait /tags et chercherait une recette dont l’id est tags.
  3. Supprime ces quatre routes de server.js.
  4. Dans server.js, importe le routeur depuis ./routes/recipes.js et monte-le sur /api/recipes avec app.use, à l’endroit où se trouvaient les quatre routes : après express.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;
quiz iconTestez-vous

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