Utilisation des middleware

Les middleware 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 requête-réponse de l’application (généralement appelée next).

Qu’est-ce qu’un middleware ?

Les middleware peuvent :

  • Exécuter n’importe quel code
  • Apporter des modifications aux objets de requête et de réponse
  • Terminer le cycle requête-réponse
  • Appeler le prochain middleware dans la pile

Middleware intégrés d’Express

Express dispose de plusieurs middleware intégrés que vous pouvez utiliser directement :

import express from 'express';

const app = express();

// Pour parser le corps des requêtes JSON
app.use(express.json());

// Pour parser le corps des requêtes URL-encoded
app.use(express.urlencoded({ extended: true }));

// Pour servir des fichiers statiques
app.use(express.static('public'));

Création de middleware personnalisés

Vous pouvez créer vos propres middleware. Voici un exemple de middleware qui enregistre les détails de chaque requête :

import { Request, Response, NextFunction } from 'express';

const loggerMiddleware = (req: Request, res: Response, next: NextFunction) => {
  console.log(`${new Date().toISOString()} - ${req.method} ${req.path}`);
  next();
};

app.use(loggerMiddleware);

Middleware d’erreur

Les middleware d’erreur sont définis avec quatre arguments au lieu de trois :

app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

Middleware pour des routes spécifiques

Vous pouvez appliquer un middleware à une route spécifique :

const authMiddleware = (req: Request, res: Response, next: NextFunction) => {
  // Vérifiez l'authentification ici
  if (/* l'utilisateur est authentifié */) {
    next();
  } else {
    res.status(401).send('Unauthorized');
  }
};

app.get('/protected', authMiddleware, (req: Request, res: Response) => {
  res.send('This is a protected route');
});

Chaînage de middleware

Vous pouvez chaîner plusieurs middleware pour une route :

app.get('/complex', 
  firstMiddleware, 
  secondMiddleware, 
  (req: Request, res: Response) => {
    res.send('This route uses multiple middleware');
  }
);

Dans la prochaine section, nous aborderons les tests de notre application Express.

Tests