Routage modulaire
Imaginez ce scénario : Vous possédez un magasin qui vend des animaux de compagnie, et un client veut vous acheter des lapins et des chats.
Si vous utilisez les méthodes de routage de base définies ci-dessus, le code ressemblera à ceci :
Vous remarquerez que nous avons écrit les mêmes routes plusieurs fois.
Cependant, écrire les routes encore et encore augmente la redondance et les coquilles. En outre, il est utile de rendre notre code plus modulaire, car c’est une bonne pratique.
En tant que programmeur, vous voulez toujours rendre votre code plus propre. Pour rendre le code ci-dessus plus facile à lire, nous pouvons utiliser deux méthodes.
Utiliser app.route
C’est ici que app.route
entre en jeu. Vous écrirez le chemin une fois, et vous pouvez enchaîner plusieurs gestionnaires de route.
Vous pouvez mettre en œuvre app.route
comme suit :
app.route(PATH)
.get(callback)
.post(callback)
//can add more HTTP requests (.put, .delete, etc)
Nous pouvons maintenant réécrire le code :
Le code a l’air plus propre, et vous n’avez dû saisir qu’une seule fois la route pour chaque requête HTTP.
Cependant, il y a une autre mise en garde : le paramètre username
existe dans toutes les routes. Taper username
encore et encore encourage les fautes de frappe et les redondances. Et si nous pouvions le rendre encore plus modulaire ?
express.Router()
Nous pouvons utiliser express.Router()
pour créer des gestionnaires de route modulaires et montables. Une Router
instance est un intergiciel et un système de routage complet, c’est pourquoi on la qualifie souvent de » mini-app « .
Nous devons seulement spécifier le point de départ, et la Router
instance s’occupera du reste pour nous.
Pour utiliser app.Router()
, nous devons créer un module séparé, instancier une instance de app.Router
, puis utiliser module.exports
pour exporter l’instance.
Pour plus de détails sur l’utilisation de module.exports
, consultez mon article précédent.
Dans cet exemple, nous allons juste gérer un simple chemin qui contiendrait les paramètres username
et id
.
Dans routerExample.js
:
Nous utilisons router.route()
, qui est similaire à app.route
. Le module défini dit : » Tant que le chemin se terminera par /:username/:id
, exécutez le code suivant tel que défini. »
Pour l’utiliser, utilisez un autre module, main.js
:
Comme le disent les commentaires, on utilise app.use
pour dire à routeExample.js
d’exécuter les fonctions qui ont des routes commençant par le premier paramètre. Le premier paramètre peut être qualifié de point de départ. Par conséquent, le chemin sera starting point + PATH defined by router
.
Par exemple, selon la ligne 6, nous allons maintenant traiter les requêtes GET et POST qui commencent par ‘/cats’
. Elles auront le chemin cats/:username/:id
.
Comme toujours, vous pouvez utiliser différentes routes dans le module routeExample
, mais la seule chose que vous devez spécifier est le point de départ dans app.use
.
Pour exécuter le code, tapez node main
dans une fenêtre de terminal et utilisez cURL
dans une autre fenêtre en conséquence.
Différents chemins dans express.Router avec middleware
Dans cet exemple, nous allons naviguer vers la page d’accueil Birds de notre animalerie et définir une fonction middleware, timeLog
, qui sortira l’heure à laquelle le chemin respectif a été demandé.
birds.js
:
En main.js
:
var birds = require('./birds')
app.use('/birds', birds) //handle /birds and /birds/about
Utiliser la commande node
pour exécuter le code, puis utiliser cURL
comme suit :