2012-03-27 5 views
25

Ich möchte eine Middleware-Funktion haben, die den Antworttext ändert.Verbinden oder Express-Middleware, um die Antwort zu ändern. Body

Dies ist für einen Express-Server.

Etwas wie:

function modify(req, res, next){ 
    res.on('send', function(){ 
    res.body = res.body + "modified" 
    }); 

    next(); 
} 

express.use(modify); 

Ich verstehe nicht, welches Ereignis zu hören. Jede Hilfe oder Dokumentation wäre zu schätzen.

Antwort

17

Sie müssen keine Ereignisse anhören. es muss nur

function modify(req, res, next){ 
    res.body = res.body + "modified"; 

    next(); 
} 

Und use es, nachdem Sie den Router use. Auf diese Weise können Sie, nachdem alle Ihre Routen ausgeführt haben, den Rumpf ändern

+5

Ich versuche, meine Middleware nach dem Router zu verwenden, aber es scheint überhaupt nicht ausgelöst werden. Es wird nur ausgelöst, wenn ich es vor app.router benutze. Ich verwende es innerhalb des app.configure Blocks, wenn das irgendeinen Unterschied macht. – ragulka

+3

Stellen Sie sicher, dass Sie 'next' auf Ihren Routen anrufen, andernfalls express führt keine Middleware nach dieser Route aus –

+6

Haben Sie eine aktualisierte Antwort für Express 4? – gustavohenke

15

Ich glaube, das OP möchte eigentlich den Antwort-Stream ändern, sobald eine Middleware die Anfrage bearbeitet hat. Sehen Sie sich die mitgelieferte Middleware-Implementierung Compress an, um zu sehen, wie dies geschieht. Verbinden Sie den Affen mit dem ServerResponse Prototyp, um das header Ereignis zu senden, wenn writeHead aufgerufen wird, aber bevor es abgeschlossen ist.

3

Das Überschreiben der Antwort write Methode schien für mich mit Express 4 zu arbeiten. Dies ermöglicht es, den Körper der Antwort zu ändern, auch wenn es ein Stream ist.

Stellen Sie sicher, dass Sie diese Middleware vor jeder anderen Middleware registrieren, die möglicherweise die Antwort ändert.

3

express-mung ist dafür ausgelegt. Statt Events ist es nur mehr Middleware. Ihr Beispiel würde so etwas aussehen wie

const mung = require('express-mung') 

module.exports = mung.json(body => body.modifiedBy = 'me');