Node.js - 5.9 Organiser les routes avec express.Router
Quand une application grandit, il devient utile de répartir les routes dans plusieurs fichiers. Express propose pour cela le routeur, une mini application que l'on peut exporter puis brancher dans l'application principale. Cette leçon organise les routes d'administration et celles de la boutique.
Créer un routeur
On crée un dossier routes, qui contient un fichier par ensemble de routes. Le fichier admin.js regroupe les routes de l'administrateur, comme la création de produits. Le fichier shop.js regroupe les routes visibles par les visiteurs.
Dans chaque fichier, on importe Express, puis on crée un routeur avec express.Router(). Les routes sont ensuite définies sur ce routeur, avec get ou post.
const express = require("express");
const router = express.Router();
// routes définies avec router.get, router.post...
module.exports = router;
Importer le routeur dans l'application
Dans le fichier principal, on importe le routeur avec un chemin relatif vers le dossier routes, sans l'extension .js. Ensuite, app.use reçoit l'objet routeur, sans parenthèses, pour que ses routes soient prises en compte.
const adminRoutes = require("./routes/admin");
app.use(adminRoutes);
L'ordre des routes compte
L'ordre des appels est important : une route placée après une autre peut ne jamais être atteinte. Une route définie avec get ne répond qu'à son chemin exact, alors qu'un middleware défini avec use répond à toutes les méthodes HTTP.
Il est donc utile de vérifier l'ordre des imports après chaque ajout.
En résumé
Express permet de regrouper les routes dans des fichiers séparés grâce à express.Router. Chaque routeur est exporté, puis importé dans l'application principale. L'ordre des appels reste important pour que chaque route soit atteinte.
Points clés
- Un fichier par ensemble de routes rend le code plus lisible.
- express.Router() crée une mini application que l'on peut exporter.
- module.exports rend le routeur disponible pour les autres fichiers.
- app.use reçoit le routeur importé, sans parenthèses.
- L'ordre des routes peut empêcher certaines d'être atteintes.
Questions fréquentes
Pourquoi séparer les routes dans plusieurs fichiers ?
Le code reste lisible quand l'application grossit, et chaque fichier correspond à un ensemble de routes.
Que fait express.Router ?
Il crée une mini application Express que l'on peut exporter, puis brancher dans l'application principale.
Pourquoi l'ordre des routes compte-t-il ?
Express traite les routes dans l'ordre. Une route trop générique placée avant une autre empêche de l'atteindre.