Appuyez sur Entrée pour voir vos résultats ou Echap pour annuler.

Comment créer un middleware avec Express

Long time no see! Vous m’excuserez l’absence d’article le 27 mars. Ma fille est née le 25, je me voyais mal taper un article dans la salle d’accouchement! « Moins fort, chérie, je m’entends plus penser ». Bref, je suis de retour avec un article sur les middlewares avec Express. Vous verrez donc ce qu’est un middleware, à quoi ça sert et comment ça fonctionne. Tout ça, avec Node.

C’est quoi un middleware?

Un middleware, ou intergiciel pour les francophiles, a une définition assez obscure. Pour faire simple, disons simplement en toute simplicité que c’est un bout de code que vous insérez entre deux couches applicatives. Si, par exemple, A parle à B, bah avec un middleware, A parle à X qui parle à B. C’est nous X 🙂

Tout dépendant des technos en place, le middleware peut être une classe ou une fonction.

À quoi ça sert?

Dans une application monopage web, la session est plus souvent qu’autrement décentralisée dans un jeton web JSON (JWT). Vous pourriez, par exemple, valider ledit jeton dans un middleware.

Si on prend Express, alors nous sommes en mesure d’ajouter un middleware qui sera exécuté avant que chaque requête soit routée vers le bon endpoint.

Go!

Pour créer le middleware, créons simplement un « hello world ». Dans un dossier, rouler npm init, puis installer Express :

Ensuite, ne partons pas en peur et allons-y avec le strict minimum pour avoir un endpoint. Créer un fichier index.js :

En lançant le serveur avec  node index.js, vous verrez Up! dans la console. Testez avec http://localhost:3000/api/hello pour voir le retour.

Rien de bien compliqué! Express est mon choix #1 pour faire des serveurs d’API.

Ce qu’il faut savoir ici, c’est que notre middleware sera créé avec une fonction d’initialisation, comme mentionné ci-avant. Ceci nous permettra de passer le contexte d’Express à notre middleware pour, par exemple, accéder à des variables secrètes, etc..

Créer un fichier middleware.js :

Donc ici, notre module est une fonction qui accepte le contexte Express en paramètre, puis retourne un objet avec une fonction apply(). C’est cette dernière qui sera appelée avec chaque requête. Dans un contexte où vous feriez de l’autorisation d’accès, le paramètre next est un callback à appeler pour laisser l’exécution passer jusqu’à votre endpoint. Vous devez appeler next() ou clore la réponse en erreur, par exemple avec un 401. Engraissons notre middleware :

Afin de l’activer, modifions simplement le fichier index.js pour ajouter ces quelques lignes :

Si vous exécutez à ce moment et que vous appelez le endpoint, vous devriez voir que ça fonctionne comme avant, mais avec une entrée supplémentaire dans les logs du serveurs.

Par contre, si vous changez la valeur du booléen grantAccess pour false , vous devriez obtenir un 401.

Mais encore?

Vous comprendrez que le middleware peut servir à beaucoup plus. Par exemple, vous pourriez vouloir extraire l’information du jeton de sécurité pour garder ces valeurs dans un singleton pour qu’elles soient accessibles rapidement le temps de la requête. Vous pourriez aussi faire une passe sur les paramètres du corps de la requête pour convertir des dates ou des nombres. Vous pourriez même journaliser la requête en BD!

Conclusion

Aujourd’hui, vous avez appris ce qu’est un intergiciel (lolz!), ce à quoi ça sert et comment on en crée un avec Express. Ça nous ferait un énorme plaisir si vous pouviez partager l’article avec vos collègues! Merci de nous lire chaque semaine 🙂

Suivez-nous par courriel!

Saisissez votre adresse courriel pour vous abonner au blog d'Ezo et recevoir une notification de chaque nouvel article par email.