ExpressJS: Middleware
Un middleware est une fonction qui intercepte les requêtes HTTP reçue permettant de :
- Modifier la requête (req) reçu avant d'exécuter une fonction du controller
- Exécuter des vérifications (utilisateur connecté ...) avant d'exécuter une fonction du controller
- Exécuter des vérifications sur les attributs de la request reçue
- Sauvegarder des logs de navigation

routage.js
/*importer la bilbiothèque exprejss*/
const express = require('express')
/*Créer une instance du module Router */
let app = express.Router()
/*un middleware Globale qui intercepte toutes les route avec toutes méthodes http
Get /hello
Post /a/b/x
....
*/
app.use('/', function(req, res, next){
//toujour exéuté
console.log("save log"+req )
/*on peut faire des vérification sur l'objet req de type request:
if(req.body...) res.send("Erreur")
....
*/
//Si la vérification passe on laisse passé la requête vers le mapping route/methodeHTTP
next();
});
//example route
app.get('/okBien', function(req, res){
res.send('Traitment Faite aprés Le middleware');
});
/*1.Middleware : On peut spécifier aussi sur quelle route on active un middleware */
app.use('/user/:id', (req, res, next) => {
console.log('Request Type:', req.method)
next()
})
/*2.la route intercepté */
app.get('/user/:id', (req, res, next) => {
res.send('USER')
})
/*On peut appliquer une série de middleware sur la meme route */
app.use('/test/:id', (req, res, next) => {
console.log('Request URL:', req.originalUrl)
next()
}, (req, res, next) => {
console.log('Request Type:', req.method)
next()
})
//un middleware Globale sera active sur toutes routes et les methodes http
app.use((req, res, next) => {
console.log('Time:', Date.now())
next()
})
//la méthode http get mappé avec la route /
app.get('/', function (req, res) {
res.send('Afficher la listes des tests');
});
//.....
//n'importe quelle autre route
app.get('*', function(req, res){
res.send('404 route not found');
});
module.exports = app
module.exports = app
L'objet req
req est un objet de type httpRequest contenant les attributs suivants :
- req.baseUrl:la route qui envoie la requête
- req.body :les données envoyées reçues (formulaire)
- eq.params: Les données envoyées via les URL
- req.cookies : les cookies envoyés
- req.ip : l'adresse IP du client
- ....
Créer un middleware :module
On peut créer un module contenant un ensemebles de fonctions qui joue le role d'un middleware
Middlewares.js
//intercepter toutes les requêtes puis vérifier si les données envoyées sont codées sous forme de json
module.exports.fonction1 = () => {
return (req, res, next) => {
if (req.headers['content-type'] !== 'application/json') {
res.status(400).send('Server requires application/json')
} else {
next()
}
}
}
//...
Serveur.js
//importer expressjs
var express = require('express');
var app = express();
//tester la connexion
const middlewares = require('./Middlewares');
app.get('/testJson', middlewares.fonction1(), (req, res, next) => {
res.send('Bien Reçu');
});
//les routes
const test = require('./routage')
app.use('/tests',test)
//démarer le serveur sur le port 8081
app.listen(8081, function () {
console.log('Écoute du port 8081');
});

morgan Middleware
c'est quoi un middleware qui pemet d'intercepter les requetes http et générer un log pour toutes les routes et les apis comsomer
Installer morgan
Serveur.js
//importer expressjs
var express = require('express');
var app = express();
/*Importer le module*/
const morgan = require("morgan")
// appliquer le Middleware
app.use(morgan("common"))
//les routes
const test = require('./routage')
app.use('/tests',test)
//démarer le serveur sur le port 8081
app.listen(8081, function () {
console.log('Écoute du port 8081');
});

Middleware Helmet
helmet est un middleware qui permet de protéger une application ExpressJS contre les vulnérabilité connue de ExpressJS en cachant des informations du header

Installer Helmet
Serveur.js
//importer expressjs
var express = require('express');
var app = express();
// Morgan Middlewares
const helmet = require("helmet");
app.use(helmet());
/*Importer le module*/
const morgan = require("morgan")
// appliquer le Middleware
app.use(morgan("common"))
//les routes
const test = require('./routage')
app.use('/tests',test)
//démarer le serveur sur le port 8081
app.listen(8081, function () {
console.log('Écoute du port 8081');
});

Middleware Rate Limit
le middleware Rate Limit permet de limiter le nombre de requête pas adresse IP afin de sécuriser l'application entre les attacks DDos attack
Installer Helmet
Serveur.js
//importer expressjs
var express = require('express');
var app = express();
//express-rate-limit Middleware
const rateLimit = require("express-rate-limit");
const limiter = rateLimit({
windowMs: 1 * 60 * 1000, // durant chaque minute une adresse ip poura appeler (max) http requête dans le serveur
max: 5, // 5 requêtes http pour chaque windowMs
message: "Plusieurs requête from this ip"
});
/*On peut appliquer un limiter sur toutes les requêtes http*/
app.use(limiter);
/*On peut appliquer un limiter seulement sur une racine des routes*/
app.use("/apis/", limiter);
// Morgan Middleware
const helmet = require("helmet");
app.use(helmet());
/*Importer le module*/
const morgan = require("morgan")
// appliquer le Middleware
app.use(morgan("common"))
//les routes
const test = require('./routage')
app.use('/tests',test)
//démarer le serveur sur le port 8081
app.listen(8081, function () {
console.log('Écoute du port 8081');
});
