Aller au contenu

Intergiciel (Middleware)

Un intergiciel (middleware) est un logiciel qui est exécuté durant la communication entre deux applications pour faire le pont entre les deux. Au niveau des services web, les middlewares seront utilisés principalement pour manipuler la requête en entrée et la réponse en sortie.

Les middlewares forment des couches concentriques autour de l’application. En commençant par le plus récent, la requête les traverse un à un jusqu’à l’application pour ensuite refaire le chemin inverse avec la réponse.

middleware.png

Trajet d'une requête HTTP dans les couches d'intergiciels

Un exemple d'utilisation serait un système d'authentification qui ne laisserait "passer" la requête HTTP à notre api seulement si elle est authentifiée adéquatement.

Avec Express.js, nous allons utiliser la fonction app.use() qui va prendre en paramètre une fonction (l'intergiciel).
Lorsque la requête arrive, elle passe à travers chaque intergiciel dans l'ordre des fonctions use().

Note

À la fin de chaque intergiciel vous devez exécuter la fonction next() pour continuer le traitement et passer au prochain intergiciel sinon le traitement s'arrêtera à la fin de la fonction.

intergiciel.js
function historique(req, res, next) {
    // Affiche à la console des informations de la requête
    console.log(`${req.method} ${req.url}`);
    // Continue le traitement
    next();
}

app.use(historique);

On peut aussi déclarer l'utilisation d'un intergiciel au niveau de la route.

index.js
1
2
3
app.get('/api/liste', historique, (req, res) => {
    // ...
})

express.json()

Express.json() est un intergiciel déjà inclus dans Express et qui est utile pour transformer le json reçu du client en objet javascript. Il nous permet donc d'accéder facilement aux données que le client envoie en JSON dans la requête sous la forme d'un objet. On accède à l'objet par req.body et le nom de la clé dans le json.

Utilisation :

tableau_de_fruits.js
app.use(express.json());

app.post('/', (req, res) => {
    const id = req.body.id; // Il y a un item id dans le json envoyé

    ...
});

Morgan

Morgan est un intergiciel pour afficher les requêtes traitées par votre serveur Express, et optionnellement en garder l'historique dans un fichier.

Pour l’installation :

console
npm install morgan

Utilisation :

utilisation_morgan.js
import morgan from 'morgan';

app.use(morgan('dev')); // format prédéfini vers la console

Un autre exemple en écrivant dans un fichier

import fs from 'fs';
var accessLogStream = fs.createWriteStream('./access.log', { flags: 'a' })
app.use(morgan('dev', { stream: accessLogStream }))