Comment utiliser les middlewares avec express<span class="wtr-time-wrap after-title"><span class="wtr-time-number">5</span> min read</span>

Comment utiliser les middlewares avec express5 min read

Express fonctionne avec des middlewares. Ce sont des fonctions qui s’exécutent les unes après les autres dans l’objectif de créer une application web.

Express possède un système de routage, c’est à dire que la fonction associé à la route va s’exécuter tout en bas de la pile de fonctions middleware.

Concrètement, à chaque appel de route, les fonctions du haut de la pile vont s’exécuter et on va déscendre jusqu’à la fonction de route.

Autrement dis, on pars d’un objet request vide et on lui applique des propriétés grâce aux fonctions middleware.

Le Body Parser par exemple va lire les arguments du body et va les assigner à une propriété de l’objet request.

J’ai trouvé un schéma qui explique le fonctionnement des middlewares express :

Comme vous le voyez, on exécute toutes les fonctions de base pour améliorer l’objet req, puis on le passe vers la fonction du router.

Bon, ça c’est pour les middleware de base d’express.

Comment créer des middleware pour express

Dans cet article, nous allons voir comment il est possible de créer ses propres middleware pour rendre votre application plus intéressante.

Il vous sera donc possible de créer vos propres fonctions qui s’exécuteront à un certain point dans la pile. Celles-ci pourront modifier les objets req et res ou faire des modifications dans les bases de donnée par exemple.

Vous le savez probablement, express est vraiment simple d’utilisation. Et bien les middlewares sont vraiment facile à mettre en place.

Il suffit d’utiliser la fonction app.use() avec une fonction de middleware passée en arguments :

app.use(function(req, res, next){
    console.log('Notre middleware est exécuté');
    console.log('Le type de notre requête ' , req.method)
    next() // On pase au prochain middleware
})

On lui passe 3 arguments, req, res et next. Les deux premiers fonctionnent exactement comme les arguments classiques d’une route. next permets d’appeler le middleware suivant.

Dans notre exemple, à chaque fois qu’une route sera accédée dans notre application, les instructions de console.log() s’exécuteront.

Dans cet exemple, le middleware s’exécute à chaque fois qu’une requête est exécutée. Il est possible de faire un peu mieux en utilisant l’objet router.

Utiliser les middleware express avec le router

Le router permets de séparer la logique de votre site web en plusieurs applications. Chaque app possède ses propres routes et est connectée au site grâce à une url de base.

On utilise les router avec Node JS pour créer des petites applications, aussi appellée micro services.

Lorsque l’on utilise les middleware avec un router, seul les routes relatives au router seront reliés au middleware :

var express = require('express');
var router = express.Router();

/* GET home page. */
router.use(function(req, res, next){
  console.log('La fonction s\'exécute seulement dans les requêtes du router')
  next();
})

router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;

Le principe est identique, on définit notre fonction middleware et on utilise router.use() pour la mettre dans la stack. La position de l’app.use() définira sa position dans la pile de middleware.

Gérer les erreurs avec les middleware

Lorsque l’on définit un middleware, il est possible de gérer les erreurs en ajoutant un autre argument.

Ces erreurs seront transmises d’un middleware à l’autre et il est possible de les traiter en renvoyant un throw error ou un res.status(500)

router.use(function(err, req, res, next){
  if (err) {
    console.error(err);
    res.status(500);
    res.json({error : err});
  } else {
    next()
  }
})

Ce middleware va simplement détecter les erreurs et les gérer en envoyant un res.status(500). Il est bien sûr possible de gérer les types d’erreurs et de les logger, les possibilités sont infinis.

En conclusion

Les middleware permettent d’ajouter de la profondeur à vos applications web en implémentant des fonctions qui s’exécuteront à chaque appel de route.

Ce système permets d’effectuer des actions complexes qui amélioreront l’expérience des utilisateurs et les fonctionnalités de votre site.

Pour utiliser les middleware, il suffit d’utiliser la fonction .use() sur le router ou l’app en passant une fonction en arguments.

Comment utiliser les middlewares avec express

Pour utiliser les middlewares, il suffit d’appeler la fonction app.use() ou router.use() avec une fonction en argument possédant les arguments req, res et next

Comment utiliser les middlewares de router avec express

Pour utiliser un middleware de router, il suffit d’appeler router.use() avec une fonction middleware. Les middlewares ne s’exécuteront que dans les routes relatives au router

J’espère que cet article vous as plu, si c’est le cas n’hésitez pas à vous abonner à ma newsletter, vous recevrez un livre numérique gratuit pour bien débuter la programmation ainsi que des conseils et des astuces régulières !

Vous abonner à notre newsletter

* champ requis

Si vous avez des questions, n’hésitez pas à me les poser en commentaires !

Laisser un commentaire

Fermer le menu
×
×

Panier