Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Création de Middleware Personnalisé | Développement d'Applications Web avec Express.js
Développement Backend avec Node.js et Express.js

Création de Middleware Personnalisé

Glissez pour afficher le menu

Dans Express.js, il est possible de créer des fonctions middleware personnalisées à l'aide de la méthode app.use(). Ces fonctions prennent trois paramètres : req (l'objet requête), res (l'objet réponse) et next (une fonction permettant de passer le contrôle au middleware suivant dans la chaîne). Les middlewares personnalisés peuvent être appliqués globalement à toutes les routes ou à des routes spécifiques en précisant un chemin de route.

Création d'un middleware personnalisé

Voici un exemple simple d'une fonction middleware personnalisée qui enregistre l'horodatage et l'URL de chaque requête entrante :

app.use((req, res, next) => {
  const timestamp = new Date().toISOString();
  const url = req.url;
  
  console.log(`[${timestamp}] ${url}`);
  
  next(); // Pass control to the next middleware.
});

Dans cet exemple, le middleware personnalisé enregistre l'horodatage et l'URL de chaque requête entrante dans la console. La fonction next() est appelée pour passer le contrôle au middleware suivant dans la chaîne.

Exemple concret : combiner middleware intégré et middleware personnalisé

Voici un exemple pratique où un middleware intégré d'Express est utilisé pour analyser les données JSON, puis un middleware personnalisé est créé pour valider ces données avant de poursuivre :

const express = require('express');
const app = express();

// Use built-in middleware to parse JSON data.
app.use(express.json());

// Custom middleware to validate JSON data.
app.use((req, res, next) => {
  const jsonData = req.body;

  if (!jsonData || Object.keys(jsonData).length === 0) {
    // If the JSON data is missing or empty, send an error response.
    return res.status(400).json({ error: 'Invalid JSON data' });
  }

  // Data is valid; proceed to the next middleware or route.
  next();
});

// Route that expects valid JSON data.
app.post('/api/data', (req, res) => {
  const jsonData = req.body;
  res.status(200).json({ message: 'Data received', data: jsonData });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000.');
});

Dans cet exemple :

  • Le middleware intégré express.json() est utilisé pour analyser les données JSON entrantes ;
  • Un middleware personnalisé vérifie si les données JSON analysées sont manquantes ou vides. Si c'est le cas, il envoie une réponse 400 Bad Request avec un message d'erreur. Si les données sont valides, il appelle next() pour poursuivre vers la route ;
  • La route /api/data attend des données JSON valides. Si le middleware personnalisé valide les données, le gestionnaire de route les reçoit et envoie une réponse de succès.
Description du code
expand arrow
  • Ligne 1 : importe le framework Express.js ;

  • Ligne 2 : crée une instance d'application Express en appelant express(). L'objet app résultant est utilisé pour définir les routes, les middlewares et gérer les requêtes HTTP ;

  • Ligne 5 : active le middleware intégré express.json(). Ce middleware analyse automatiquement les corps de requêtes JSON entrants et rend les données disponibles via req.body ;

  • Lignes 8-18 : définissent un middleware personnalisé utilisé pour valider les données JSON entrantes ;

  • vérifie si req.body contient des données ;

  • renvoie une réponse 400 Bad Request si le corps de la requête est manquant ou vide ;

  • appelle next() si les données JSON sont valides et continue vers le middleware ou le gestionnaire de route suivant ;

  • Lignes 21-24 : définissent une route POST sur /api/data ;

  • récupère les données JSON soumises depuis req.body ;

  • renvoie une réponse 200 OK contenant un message de confirmation et les données reçues ;

  • Lignes 26-28 : démarrent l'application Express et commencent à écouter les requêtes sur le port 3000.

Cet exemple montre comment utiliser à la fois des middlewares intégrés et personnalisés pour valider les données avant qu'elles n'atteignent les gestionnaires de routes, garantissant ainsi que les données sont dans le format attendu avant d'être traitées.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 9

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Création de Middleware Personnalisé

Dans Express.js, il est possible de créer des fonctions middleware personnalisées à l'aide de la méthode app.use(). Ces fonctions prennent trois paramètres : req (l'objet requête), res (l'objet réponse) et next (une fonction permettant de passer le contrôle au middleware suivant dans la chaîne). Les middlewares personnalisés peuvent être appliqués globalement à toutes les routes ou à des routes spécifiques en précisant un chemin de route.

Création d'un middleware personnalisé

Voici un exemple simple d'une fonction middleware personnalisée qui enregistre l'horodatage et l'URL de chaque requête entrante :

app.use((req, res, next) => {
  const timestamp = new Date().toISOString();
  const url = req.url;
  
  console.log(`[${timestamp}] ${url}`);
  
  next(); // Pass control to the next middleware.
});

Dans cet exemple, le middleware personnalisé enregistre l'horodatage et l'URL de chaque requête entrante dans la console. La fonction next() est appelée pour passer le contrôle au middleware suivant dans la chaîne.

Exemple concret : combiner middleware intégré et middleware personnalisé

Voici un exemple pratique où un middleware intégré d'Express est utilisé pour analyser les données JSON, puis un middleware personnalisé est créé pour valider ces données avant de poursuivre :

const express = require('express');
const app = express();

// Use built-in middleware to parse JSON data.
app.use(express.json());

// Custom middleware to validate JSON data.
app.use((req, res, next) => {
  const jsonData = req.body;

  if (!jsonData || Object.keys(jsonData).length === 0) {
    // If the JSON data is missing or empty, send an error response.
    return res.status(400).json({ error: 'Invalid JSON data' });
  }

  // Data is valid; proceed to the next middleware or route.
  next();
});

// Route that expects valid JSON data.
app.post('/api/data', (req, res) => {
  const jsonData = req.body;
  res.status(200).json({ message: 'Data received', data: jsonData });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000.');
});

Dans cet exemple :

  • Le middleware intégré express.json() est utilisé pour analyser les données JSON entrantes ;
  • Un middleware personnalisé vérifie si les données JSON analysées sont manquantes ou vides. Si c'est le cas, il envoie une réponse 400 Bad Request avec un message d'erreur. Si les données sont valides, il appelle next() pour poursuivre vers la route ;
  • La route /api/data attend des données JSON valides. Si le middleware personnalisé valide les données, le gestionnaire de route les reçoit et envoie une réponse de succès.
Description du code
expand arrow
  • Ligne 1 : importe le framework Express.js ;

  • Ligne 2 : crée une instance d'application Express en appelant express(). L'objet app résultant est utilisé pour définir les routes, les middlewares et gérer les requêtes HTTP ;

  • Ligne 5 : active le middleware intégré express.json(). Ce middleware analyse automatiquement les corps de requêtes JSON entrants et rend les données disponibles via req.body ;

  • Lignes 8-18 : définissent un middleware personnalisé utilisé pour valider les données JSON entrantes ;

  • vérifie si req.body contient des données ;

  • renvoie une réponse 400 Bad Request si le corps de la requête est manquant ou vide ;

  • appelle next() si les données JSON sont valides et continue vers le middleware ou le gestionnaire de route suivant ;

  • Lignes 21-24 : définissent une route POST sur /api/data ;

  • récupère les données JSON soumises depuis req.body ;

  • renvoie une réponse 200 OK contenant un message de confirmation et les données reçues ;

  • Lignes 26-28 : démarrent l'application Express et commencent à écouter les requêtes sur le port 3000.

Cet exemple montre comment utiliser à la fois des middlewares intégrés et personnalisés pour valider les données avant qu'elles n'atteignent les gestionnaires de routes, garantissant ainsi que les données sont dans le format attendu avant d'être traitées.

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 9
some-alt