J'aimerais avoir une fonction middleware qui modifie le corps de réponse.
C'est pour un serveur express.
Quelque chose comme:
function modify(req, res, next){
res.on('send', function(){
res.body = res.body + "modified"
});
next();
}
express.use(modify);
Je ne comprends pas quel événement écouter. Toute aide ou documentation serait appréciée.
Vous n'avez pas besoin d'écouter les événements. Faites-le
function modify(req, res, next){
res.body = res.body + "modified";
next();
}
Et use
après vous use
le routeur. De cette façon, une fois tous vos itinéraires exécutés, vous pouvez modifier le corps
Je pense que l'OP souhaite réellement modifier le flux de réponse une fois qu'un middleware a traité la demande. Regardez l'implémentation du middleware Compress fourni pour un exemple de la façon dont cela est fait. Connect monkey corrige le prototype ServerResponse
pour émettre l'événement header
lorsque writeHead
est appelé, mais avant qu'il ne soit terminé.
express-mung est conçu pour cela. Au lieu d'événements, c'est juste un middleware. Votre exemple ressemblerait à quelque chose
const mung = require('express-mung')
module.exports = mung.json(body => body.modifiedBy = 'me');
L'écrasement de la méthode write de la réponse semblait fonctionner pour moi avec Express 4. Cela permet de modifier le corps de la réponse même s'il s'agit d'un flux.
app.use(function (req, res, next) {
var write = res.write;
res.write = function (chunk) {
if (~res.getHeader('Content-Type').indexOf('text/html')) {
chunk instanceof Buffer && (chunk = chunk.toString());
chunk = chunk.replace(/(<\/body>)/, "<script>alert('hi')</script>\n\n$1");
res.setHeader('Content-Length', chunk.length);
}
write.apply(this, arguments);
};
next();
});
Assurez-vous simplement d'enregistrer ce middleware avant tout autre middleware susceptible de modifier la réponse.
Il semble y avoir un module pour ce faire appelé connect-static-transform
, vérifiez-le:
https://github.com/KenPowers/connect-static-transform
Un middleware de connexion qui permet de transformer des fichiers statiques avant de les servir.
Et il est livré avec des exemples, comme celui-ci .