Aller au contenu

Middleware (Intergiciel) Express

Lorsque la requête arrive, elle passe à travers chaque intergiciel.
L’intergiciel appelle le prochain avec next()

graph TD
  A[Client] -- req --> B[Intergiciel 1];
  B[Intergiciel 1] -- res --> A[Client];
  B[Intergiciel 1] -- req --> C[Intergiciel 2];
  C[Intergiciel 2] -- res --> B[Intergiciel 1];
  C[Intergiciel 2] -- req --> D["app.get()"];
  D["app.get()"] -- res --> C[Intergiciel 2];
index.ts
import express from "express";

const app = express();
const port = 3000;

function historique(
  req: express.Request,
  res: express.Response,
  next: express.NextFunction
) {
  console.log(`${req.method} ${req.url}`);
  next();
}

const historiqueParametre = (
  req: express.Request,
  res: express.Response,
  next: express.NextFunction
) => {
  const nom = req.query.nom;
  console.log(nom);
  if (nom === "Etienne") {
    next();
  } else {
    res.status(404).send("Erreur");
  }
};

app.use(historique);
app.use(historiqueParametre);

app.get("/", (req: express.Request, res: express.Response) => {
  res.send("Hello World");
});

app.listen(port, () => console.log("serveur démaré"));

S'il y a un besoin de contrôler et même refuser l'exécution de routes, l'intergiciel peut courtcircuiter la chaîne comme suit :

mini-securite.ts
const bloquerSiPasEtienne = (
  req: express.Request,
  res: express.Response,
  next: express.NextFunction,
) => {
  const nom = req.query.nom;
  console.log(nom);
  if (nom === 'Etienne') {
    next();
  } else {
    res.status(403).send('Erreur');
  }
};

app.use(bloquerSiPasEtienne);

Intergiciel - morgan

Morgan est un intergiciel pour garder l’historique des requêtes traitées par votre serveur Express.

Pour l’installation :

console
npm install morgan @types/morgan

Pour l’utilisation :

utilisation_morgan.ts
import morgan from 'morgan’;

app.use(morgan('dev'));

Intergiciel – express.json()

Intergiciel pour transformer le json reçu du client en objet, remplace req.body.

Utilisation :

utilisateurs.ts
app.use(express.json());

app.post('/', (req: express.Request<Utilisateur>, res: express.Response) => {
    const nouvelUtilisateur: Utilisateur = {
        id: req.body.id,
        utilisateur: req.body.utilisateur,
        nom: req.body.nom,
        age: req.body.age,
    };
    listeUtilisateurs.push(nouvelUtilisateur);
    res.send(nouvelUtilisateur);
    console.log(nouvelUtilisateur);
});