2. Cas d’utilisations des Middlewares

Nous savons maintenant un peu mieux ce qu’est un Middleware. On sait que l’on peut factoriser des comportements communs entre les requêtes entrantes et sortantes d’une API Rest. Cependant, il est encore difficile pour nous de bien comprendre à quoi cela peut nous servir…

En fait, les Middlewares sont une fonctionnalité d’Express suffisamment polyvalente pour effectuer des tâches très diverses. Les middleswares sont donc très puissants une fois qu’on les utilise régulièrement. Par contre, c’est compliqué de se représenter un premier cas d’utilisation concret au départ.

Heureusement, la documentation d’Express est plutôt bien faite sur le sujet, et les cas d’utilisation des Middlewares ont été regroupés en cinq catégories principales.

Le Middleware d’application

Ce sont les Middlewares les plus courants lorsque l’on débute dans le domaine. Ils sont reliés directement à l’instance d’Express, grâce à la méthode use() :

var app = express();
 
// On passe un middleware en paramètre de la méthode use():
app.use(function (req, res, next) {
  console.log('Time:', Date.now());
  next();
});

Le Middleware sera exécuté à chaque fois que l’API Rest recevra une demande. Dans ce cas, on affichera un petit message dans le terminal de commande, avec la date complète à laquelle notre API Rest a reçu la requête entrante.

On peut utiliser ce type de Middleware pour loger tout type d’événements, ou pour tout autre traitement communs aux requêtes entrantes ou sortantes de notre API Rest.

Le Middleware du routeur

Ce Middleware fonctionne directement au niveau du routeur d’Express. Il est très similaire au fonctionnement d’un Middleware d’application, mais il n’est pas relié à l’instance d’Express. À la place, on le branche sur une instance de express.Router(). Concrètement, cela permet de créer des sous-ensembles de routes, et de définir une hiérarchie et une organisation entre les routes de votre API Rest, dans le cas où celle-ci devient très importante en taille. Mais pour les besoins de notre API Rest, nous n’aurons pas besoin de ce type de middleware plus avancé.

Le Middleware de traitement d’erreurs

Le Middleware de traitement d’erreurs est légèrement différent, car il doit prendre 4 arguments en compte :

app.use(function(err, req, res, next) {
  console.error(err);
  res.send('Erreur !');
});

Il faut absolument fournir 4 arguments à ce Middleware, car c’est ce qui lui permet d’être identifié comme un Middleware de traitement d’erreur, et pas autre chose.

C’est pour cela que même si on n’utilise pas le paramètre next dans cet exemple, on passe quand même 4 paramètres au Middleware, afin de respecter la « règle des quatre arguments ».

Sinon, avec 3 paramètres, Express pensera qu’il s’agira d’un Middleware ordinaire, et n’arrivera pas à gérer les erreurs correctement.

Le (dernier) Middleware intégré

Historiquement, il existait quelques middleswares directement intégrés à Express, un peu comme les modules déjà présents dans Node.js.

Mais depuis la version 4 d’Express, il n’y a plus qu’un seul et unique Middleware encore intégré à Express, et il se nomme express.static. Ce Middleware a comme responsabilité de servir des documents statiques depuis une API Rest Express, comme des images ou un PDF par exemple.

Les autres Middleswares auparavant intégrés dans Express sont toujours utilisables et maintenus par l’équipe derrière Express, mais ils sont disponibles sous la forme de dépendances extérieures, qu’il vous faudra installer.

Les Middlewares tiers

Il s’agit de tous les Middlewares disponibles sous la forme d’une dépendance extérieure.

En gros, ces middleswares sont des modules JavaScript qu’il vous faudra installer dans votre dossier node_modules comme n’importe quelle autre dépendance de votre projet.

Il existe un nombre important de Middlewares déjà prêt à l’emploi, et nous verrons un peu plus tard comment les installer et les utiliser pour notre API Rest.

Voilà ! 🙂

Comme vous pouvez le constater, les types de Middlewares sont nombreux et couvrent des cas d’utilisation complètement différents. On peut aussi bien s’en servir pour traiter les cas d’erreur, loger les requêtes entrantes, ou encore installer et utiliser un Middleware déjà existant dans notre API Rest.

Afin de rendre tout cela un peu plus concret, dans la prochaine étape nous allons essayer de créer notre propre Middleware, pour loger les requêtes entrantes dans notre API Rest.