Le middleware dans Node.js est une fonction qui se situe entre un système d’exploitation et les applications qui y sont exécutées. Elle a accès à l’objet de requête (req), l’objet de réponse (res) et la fonction middleware suivante dans le cycle requête-réponse de l’application (next).
Cette fonction du middleware dans Node.js permet d’exécuter un programme informatique, d’apporter des modifications aux objets de demande et de réponse, achever le cycle requête-réponse et d’appeler la fonction middleware suivante dans la pile.
Dans cet article, vous découvrirez les différentes facettes de l’implémentation du middleware dans Node.js en étudiant les frameworks Express.js et Koa.js.
Express.js : Implémentation du middleware
Ayant une similitude de fonctionnement avec le Lavrel, Express.js utilise le principe client-serveur pour accepter les requêtes des utilisateurs et renvoyer les réponses au client.
En effet, lorsque le serveur reçoit la requête HTTP du client les fonctions middleware sont appelées suivant l’ordre où elles ont été attachées à l’application Express.js à l’aide de la méthode app.use ().
Chaque fonction middleware peut effectuer des opérations sur les objets de demande et de réponse, ainsi que décider de passer ou non le contrôle à la prochaine fonction middleware.
Dans le cas où la fonction middleware appelle la fonction « next () », le contrôle est transmis à la prochaine fonction middleware dans la pile.
Si une fonction middleware termine le cycle, le processus s’arrête et la réponse est renvoyée au client.
Utilisation de la méthode `app.use ()` pour appliquer le middleware globalement
L’utilisation de la méthode app.use () pour appliquer le middleware de manière globale implique premièrement de définir votre fonction middleware.
Cette fonction prend généralement trois arguments : l’objet de requête (req), l’objet de réponse (res) et la fonction ‘next’ qui est appelée pour passer le contrôle au middleware suivant dans la séquence. Ensuite, ajoutez votre middleware à l’application en utilisant app.use ().
Il faudra placer cette instruction avant la définition des routes. Lorsqu’une requête est reçue par l’application, le middleware sera exécuté en premier.
Voici un exemple de code illustrant l’implémentation d’un middleware dans Express.js :
Avantages et limitations de l’approche d’Express.js
Il est recommandé d’utiliser Express.js dans un projet en raison de sa rapidité et de sa flexibilité. En effet, c’est un Framework minimaliste qui offre aux développeurs un ensemble de fonctionnalités de base pour la construction d’applications web.
Il existe d’autres avantages en choisissant Express.js tels que :
- La facilité d’apprentissage ;
- Un puissant système de routage ;
- Une communauté active ;
- Une prise en charge par les nouveaux modèles de moteurs de recherche.
En termes de limitations, Express.js manque de structure et de convention ce qui conduit à un code désorganisé et difficile à maintenir.
D’autres inconvénients tels que la surcharge, les fonctionnalités limitées, une courbe d’apprentissage abrupte pour les middlewares et le manque de typage fort sont à notifier.
Koa.js : Implémentation du middleware
Le middleware dans Koa.js utilise le modèle ‘onion’ dans son fonctionnement. Ici, les middlewares sont exécutés sous forme de couches successives. Chaque middleware peut modifier la demande (ou la réponse) avant qu’elle ne soit transmise au prochain middleware dans la pile.
Le modèle ‘onion’ garantit une exécution dans l’ordre d’ajout des middlewares. Aussi, Koa fonctionne également avec les promesses JavaScript pour permettre une gestion asynchrone fluide.
Utilisation de la méthode `app.use ()` pour appliquer le middleware globalement
Pour appliquer un middleware globalement avec Koa.js, il faut définir les paramètres ctx (contexte) et next (une fonction qui appelle le middleware suivant dans la chaîne).
À l’intérieur du middleware, vous pouvez ajouter le code que vous souhaitez exécuter pour chaque requête, puis vous appelez await next() pour passer le contrôle au middleware suivant.
Comparaison de la syntaxe `async/await’ et `ctx` de Koa.js avec Express.js
Koa.js est essentiellement basé sur l’utilisation intensive de fonctions asynchrones et de l’opérateur await pour gérer les opérations asynchrones de manière plus lisible et synchronisée. De cette manière, les middlewares sont exécutés de manière séquentielle.
L’opérateur await est utilisé pour attendre la résolution d’une promesse, ce qui permet de suspendre temporairement l’exécution du middleware jusqu’à ce que la promesse soit résolue.
Quant à Express.js, il utilise généralement des callbacks pour gérer les opérations asynchrones. Quand bien même il est possible d’utiliser les promesses avec Express.js, la syntaxe async/await n’est pas aussi courante qu’elle l’est dans Koa.js.
Voici un exemple de code illustrant l’implémentation d’un middleware dans Koa.js :
Avantages et limitations de l’approche de Koa.js
L’approche de Koa.js présente des avantages, mais également des limitations. Voici quelques avantages :
- La gestion avancée des erreurs ;
- Une petite empreinte ;
- La modularité ;
- L’interopérabilité améliorée.
Les limitations de l’approche de Koa.js
- Une petite communauté ;
- Pas compatible avec certains middlewares Express ;
- Absence de certaines fonctionnalités.
Le choix entre Koa.js et d’autres Frameworks dépendra des besoins spécifiques de votre projet et de votre niveau de familiarité avec les fonctionnalités spécifiques de Koa.js.
Différences entre Express.js et Koa.js
Maintenant que vous avez une idée précise sur les différentes facettes des deux Frameworks, étudions de plus près les différences :
Gestion des erreurs
Express.js utilise un gestionnaire d’erreurs middleware à la fin de la chaîne des middlewares. Voici la syntaxe à utiliser `app.use ((err, req, res, next) => {})`.
Quant à Koa.js la gestion des erreurs est plus simple et plus élégante. Elles sont gérées via le `try/catch`, et vous pouvez utiliser un middleware `app.use (async (ctx, next) => {})` pour les capturer et les gérer.
Empilement du middleware
Express.js utilise un modèle de middleware en cascade basé sur des callbacks. C’est-à-dire, chaque middleware appelle `next ()’ pour passer la main au middleware suivant.
Par ailleurs, Koa.js utilise également un modèle de middleware en cascade, mais basé sur les promesses. Ici, tout middleware utilise `await next ()’ pour passer la main au middleware suivant. Cela permet un flux de contrôle plus fluide et des middlewares plus propres.
Écosystème de middleware disponible
Express.js dispose d’un écosystème de middleware très large et bien établi. En effet, il existe une multitude de middlewares prêts à l’emploi pour des tâches variées. Contrairement à Koa.js qui ne fournit pas de middlewares inclus dans son noyau. Cependant, il existe également un écosystème de middlewares pour Koa, mais il peut être moins étendu que celui d’Express.
Considérations pour le choix entre les deux frameworks
En considérant la gestion des erreurs, l’empilement du middleware et l’écosystème de middleware disponible des deux frameworks, il faut retenir qu’Express.js est idéal pour les projets de toutes tailles, en particulier si vous avez besoin d’une grande variété de middlewares prêts à l’emploi.
Tandis que Koa.js est recommandé pour les projets où un contrôle sur le flux est indispensable et où vous n’avez pas besoin de nombreux middlewares.
Conclusion
En résumé, Express.js a un écosystème de middleware plus vaste, tandis que Koa.js offre une approche plus élégante de la gestion des erreurs et du flux de contrôle grâce à l’utilisation des promesses.
Le choix entre les deux dépendra de la complexité de votre projet, de vos préférences de programmation et de votre besoin de contrôle sur le flux de contrôle et les erreurs.
Leave a Reply