Aller au contenu

Intergiciel (Middleware)

En terme général, un middleware est un logiciel qui est exécuté durant la communication entre deux applications. 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 traverses un a 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é 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 facilement d'accéder aux données que le client auraient envoyées 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 garder l’historique des requêtes traitées par votre serveur Express.

Pour l’installation :

console
npm install morgan

Utilisation :

utilisation_morgan.js
import morgan from 'morgan';

app.use(morgan('dev')); // format prédifini, voir dans la doc

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 }))