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.
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.
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.
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 :
app.use(express.json());
app.post('/', (req, res) => {
const id = req.body.id; // Il y a un item id dans le json envoyé
...
});
Manuel
morgan
Morgan est un intergiciel pour garder l’historique des requêtes traitées par votre serveur Express.
Pour l’installation :
Utilisation :
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 }))
Manuel