:::: MENU ::::

Créer un middleware pour express ou connect

Si à première vu cette opération peut sembler compliquée à mettre en oeuvre, il n’en est rien et c’est même plutôt l’inverse. Suivez le guide …

Pourquoi faire un middleware ?

En fait, pour à peu prêt tout ! Connect est un simple framework http, la plupart de ses fonctionnalités étendues le sont par des middlewares. Quant à Express il s’agit d’un Connect toutes options.

Logger, sessions, gestion d’erreur…etc, ce sont tous des middleware. Depuis ExpressJs 4 la plupart des composants même indispensables à une application web moderne sont à installer indépendamment  ( body-parser par exemple ).

Comment ça marche ?

Un middleware se présente sous la forme d’une fonction de type callback à laquelle on va fournir trois objets : request ( req ) , response ( res )  et next.

req permet d’obtenir les informations de la requête qui vient d’être effectuée par le client, res sera la réponse renvoyée et next sert d’appel à la fonction ( middleware ? ) suivante.

Le Hello World du middleware

Après un petit npm install connect, voici l’exemple d’un serveur web et de son middleware « HelloWorld » associé :

var http = require("http");
var connect = require("connect");

var app = connect();

app.use(function(req, res) {
 res.end("HelloWorld");
});

http.createServer(app).listen(8080);

A chaque requête, le serveur va utiliser notre middleware ( une simple fonction de callback) et retourner »HelloWorld ». Facile non ? Le seul soucis c’est que notre serveur ne peut rien faire d’autre…

Dans la vrai vie

Un middleware ne doit pas être bloquant

Sauf si il doit terminer la connexion en cours ( une mauvaise autorisation par exemple ), res.end ne doit pas être utilisé car il renverra la réponse au client et terminera la chaîne d’exécution de la requête. Préférer res.write en cas d’écriture dans la réponse et ne pas oublier d’appeler next() à la fin .

Il est préférable d’utiliser des modules

Un middleware est généralement conçu comme un composant réutilisable, il est donc plus pratique et plus propre d’en faire un module.

Le middleware :

module.exports = function() {

    return function(req, res, next) {
        res.write("HelloWorld");
        next();
    };

};

Sur le serveur :

var monMiddleware = require("monMiddleware");
var app = connect();

app.use(monMiddleware());

app.use(function(req, res) {
 res.end(" ! ");
});

Comments are closed.