Skip to content

Les Middlewares Express.js

Les middlewares sont des fonctions qui ont accès à l'objet de requête (req), l'objet de réponse (res), et la fonction middleware suivante dans le cycle de vie d'une requête-réponse de l'application. Les middlewares peuvent effectuer une variété de tâches telles que l'exécution de code, la modification de la requête et de la réponse, la fin du cycle de requête-réponse, et l'appel du middleware suivant dans la pile.

Bien Comprendre

Pensez aux middlewares comme à des portiers dans un club ou un restaurant sélect. Lorsqu'une personne (la requête) tente d'entrer dans le club (le serveur), elle doit passer par une série de portiers (middlewares) avant de pouvoir entrer.

  1. Le Premier Portier (Middleware d'Authentification) :

    • Il vérifie si la personne est sur la liste des invités (a un token valide).
    • S'il n'est pas sur la liste, il ne peut pas entrer.
    • S'il est sur la liste, il peut passer au portier suivant.
  2. Le Deuxième Portier (Middleware de Validation) :

    • Il vérifie si la personne respecte le code vestimentaire (la requête a les bonnes données).
    • Si la personne ne respecte pas le code vestimentaire, elle ne peut pas entrer.
    • Si la personne respecte le code vestimentaire, elle peut passer au portier suivant.
  3. Le Troisième Portier (Middleware de Rôle) :

    • Il vérifie le rôle ou le niveau d’accès de la personne (utilisateur normal, administrateur, etc.).
    • Selon le rôle ou le niveau d’accès, il détermine dans quelles parties du club la personne est autorisée à entrer.

Comment Cela Se Traduit en Middlewares dans Express.js?

  1. Middleware d'Authentification :

    • Vérifie si la requête contient un token d'authentification valide.
    • Si non, renvoie une réponse d'erreur.
    • Si oui, passe à la prochaine middleware.
  2. Middleware de Validation :

    • Vérifie si la requête contient toutes les données nécessaires et si elles sont valides.
    • Si non, renvoie une réponse d'erreur.
    • Si oui, passe à la prochaine middleware.
  3. Middleware de Rôle :

    • Vérifie le rôle de l'utilisateur (à partir du token, par exemple).
    • Restreint l'accès à certaines routes en fonction du rôle de l'utilisateur.

Exemple: Middleware d'Authentification

Nous allons créer un exemple simple de middleware d'authentification dans une application Express.js.

1. Initialisation du Projet

Initialisez un nouveau projet Node.js et installez express si ce n’est pas déjà fait :

sh
mkdir projetMiddleware
cd projetMiddleware
npm init -y
npm install express
mkdir projetMiddleware
cd projetMiddleware
npm init -y
npm install express

Créez un fichier app.js pour votre application.

2. Créer le Middleware d'Authentification

Dans app.js, importez express et créez un middleware qui vérifie la présence d'un token d'authentification dans les en-têtes de requête. Si le token est valide, le middleware appelle next(), permettant à la requête de progresser vers le gestionnaire de route suivant. Si le token est absent ou invalide, une réponse d'erreur est renvoyée.

javascript
import express from 'express';

const app = express();

const authMiddleware = (req, res, next) => {
  const authHeader = req.headers.authorization;
  
  if (!authHeader) return res.status(401).send('Token non fourni');
  
  const parts = authHeader.split(' ');
  
  if (!parts.length === 2) return res.status(401).send('Erreur de token');
  
  const [scheme, token] = parts;
  
  if (!/^Bearer$/i.test(scheme)) return res.status(401).send('Format de token incorrect');
  
  if (token !== 'TOKEN_SECRET') return res.status(401).send('Token non valide');
  
  next();
};

app.use(authMiddleware);

app.get('/', (req, res) => {
  res.send('Accès autorisé');
});

const port = 3000;
app.listen(port, () => {
  console.log(`Le serveur écoute sur le port ${port}`);
});
import express from 'express';

const app = express();

const authMiddleware = (req, res, next) => {
  const authHeader = req.headers.authorization;
  
  if (!authHeader) return res.status(401).send('Token non fourni');
  
  const parts = authHeader.split(' ');
  
  if (!parts.length === 2) return res.status(401).send('Erreur de token');
  
  const [scheme, token] = parts;
  
  if (!/^Bearer$/i.test(scheme)) return res.status(401).send('Format de token incorrect');
  
  if (token !== 'TOKEN_SECRET') return res.status(401).send('Token non valide');
  
  next();
};

app.use(authMiddleware);

app.get('/', (req, res) => {
  res.send('Accès autorisé');
});

const port = 3000;
app.listen(port, () => {
  console.log(`Le serveur écoute sur le port ${port}`);
});

Dans cet exemple, nous utilisons un token statique TOKEN_SECRET pour simplifier, mais dans une application réelle, vous utiliseriez probablement une bibliothèque comme jsonwebtoken pour générer et vérifier des tokens JWT (JSON Web Tokens).

3. Tester le Middleware d'Authentification

Pour tester ce middleware d'authentification, lancez votre serveur :

sh
node app.js
node app.js

Ensuite, effectuez une requête GET vers votre serveur en utilisant curl ou Postman, avec et sans l'en-tête d'autorisation contenant le token d'authentification.

sh
curl -H "Authorization: Bearer TOKEN_SECRET" http://localhost:3000
curl -H "Authorization: Bearer TOKEN_SECRET" http://localhost:3000

Vous devriez recevoir la réponse 'Accès autorisé' quand vous incluez le token correct, et un message d'erreur approprié quand le token est absent, incorrect ou mal formaté.

Résumé

Les middlewares Express.js permettent d'exécuter du code entre la réception de la requête et l'envoi de la réponse, offrant une méthode flexible pour gérer l'authentification, la journalisation, la gestion des erreurs, et plus encore. Dans cet exemple, nous avons créé un middleware d'authentification simple qui vérifie la présence et la validité d'un token d'authentification dans les en-têtes de requête.