web-dev-qa-db-fra.com

Node.js: Comment faire quelque chose sur toutes les requêtes HTTP dans Express?

Je voudrais donc faire quelque chose comme:

app.On_All_Incoming_Request(function(req, res){
    console.log('request received from a client.');
});

la app.all() actuelle nécessite un chemin, et si je donne par exemple ce / alors cela ne fonctionne que lorsque je suis sur la page d'accueil, donc ce n'est pas vraiment tout.

Dans plain node.js, c'est aussi simple que d'écrire quoi que ce soit après avoir créé le serveur http et avant de faire le routage des pages.

Alors, comment faire cela avec express, et quelle est la meilleure façon de le faire?

31
Adam

Express est basé sur le middleware Connect .

Les capacités de routage d'Express sont fournies par le router de votre application et vous êtes libre d'ajouter vos propres middlewares à votre application.

var app = express.createServer();

// Your own super cool function
var logger = function(req, res, next) {
    console.log("GOT REQUEST !");
    next(); // Passing the request to the next handler in the stack.
}

app.configure(function(){
    app.use(logger); // Here you add your logger to the stack.
    app.use(app.router); // The Express routes handler.
});

app.get('/', function(req, res){
    res.send('Hello World');
});

app.listen(3000);

C'est si simple.

(PS: si vous voulez juste un peu de journalisation, vous pourriez envisager d'utiliser le logger fourni par Connect)

46
Rahman Kalfane

Vous devriez faire ceci:

app.all("*", function (req, resp, next) {
   console.log(req); // do anything you want here
   next();
});
1
Abadis

Express prend en charge caractères génériques dans les chemins de routage . Donc app.all('*', function(req, res) {}) est une façon de procéder.

Mais c'est juste pour les gestionnaires d'itinéraire. La différence est qu'un gestionnaire d'itinéraire Express est censé envoyer une réponse et, dans le cas contraire, Express n'enverra jamais de réponse. Si vous voulez faire quelque chose sans envoyer explicitement une réponse, comme rechercher un en-tête, vous devez utiliser middleware Express . app.use(function(req, res, next) { doStuff(); next(); }

0
vkarpov15