Node.js - 5.6 Diriger les requêtes selon leur chemin
Un middleware peut recevoir un chemin en premier argument. Il ne s'exécute alors que pour les adresses qui commencent par ce chemin. Cette leçon montre comment diriger les requêtes vers différents traitements, et pourquoi l'ordre de déclaration est important.
Filtrer avec un chemin
La méthode use() accepte un premier argument facultatif : le chemin. Le chemin / correspond à toutes les adresses, car chaque adresse commence par un slash. Un chemin comme /product ne correspond qu'aux adresses qui commencent par ce segment.
app.use('/product', (req, res, next) => {
// traitement des requêtes dont l'adresse commence par /product
});
L'ordre de déclaration compte
Express lit les middleware de haut en bas. Si un middleware placé en premier envoie une réponse sans appeler next(), les suivants ne reçoivent jamais la requête.
Un middleware qui doit s'appliquer à toutes les requêtes se place donc en haut du fichier, et il appelle next() pour laisser passer la requête vers les traitements suivants.
En résumé
Le premier argument de use() est un chemin qui filtre les requêtes. Un middleware sans chemin, ou avec le chemin /, s'applique à toutes les requêtes. Comme Express lit de haut en bas, l'ordre de déclaration détermine quel middleware répond.
Points clés
- Le chemin passé à use() filtre les requêtes dont l'adresse commence par ce chemin.
- Un middleware sans chemin s'exécute pour toutes les requêtes.
- Le chemin / correspond à toutes les adresses.
- Un middleware qui envoie une réponse sans appeler next() bloque les suivants.
- Le middleware général se déclare en premier, avec next() pour laisser passer la requête.
Questions fréquentes
Le chemin /product correspond-il aussi à /product/details ?
Oui. Le chemin filtre les adresses qui commencent par ce segment. Il ne demande pas une correspondance exacte.
Pourquoi placer un middleware de journalisation en haut ?
Il s'applique alors à toutes les requêtes, à condition d'appeler next() pour que la suite du traitement continue.
Que se passe-t-il si deux middleware ont le même chemin ?
Le premier qui envoie une réponse sans appeler next() termine la requête, et le second ne s'exécute pas. C'est donc l'ordre qui décide.