応答本文を変更するミドルウェア関数が欲しいです。
これは、エクスプレスサーバー用です。
何かのようなもの:
function modify(req, res, next){
res.on('send', function(){
res.body = res.body + "modified"
});
next();
}
express.use(modify);
どのイベントをリッスンするのかわかりません。ヘルプやドキュメントをいただければ幸いです。
イベントを聞く必要はありません。ちょうどそれを作る
function modify(req, res, next){
res.body = res.body + "modified";
next();
}
そして、use
ルーターのuse
の後。これにより、すべてのルートが実行された後、本文を変更できます
ミドルウェアが要求を処理した後、OPは実際に応答ストリームを変更したいと考えています。バンドルされた Compress ミドルウェア実装を見て、これがどのように行われるかの例を確認してください。 Connect monkeyは、ServerResponse
プロトタイプがheader
が呼び出されたときに、完了前にwriteHead
イベントを発行するようにパッチを適用します。
express-mung はこのために設計されています。イベントではなく、単なるミドルウェアです。あなたの例は次のようになります
const mung = require('express-mung')
module.exports = mung.json(body => body.modifiedBy = 'me');
Express 4では、応答の write メソッドを上書きできるように思えました。これにより、ストリームであっても応答の本文を変更できます。
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();
});
応答を変更する可能性のある他のミドルウェアの前に、このミドルウェアを必ず登録してください。
これを行うためのモジュールは connect-static-transform
、チェックしてください:
https://github.com/KenPowers/connect-static-transform
静的ファイルを提供する前に変換できるようにする接続ミドルウェア。
そして、 this one のような例が付属しています。