Подключить или выполнить промежуточное ПО для изменения ответа.
Я хотел бы иметь функцию промежуточного программного обеспечения, которая модифицирует тело ответа.
Это для экспресс-сервера.
Что-то вроде:
function modify(req, res, next){
res.on('send', function(){
res.body = res.body + "modified"
});
next();
}
express.use(modify);
Я не понимаю, какое событие слушать. Любая помощь или документация были бы оценены.
Ответы
Ответ 1
Вам не нужно слушать какие-либо события. Просто сделайте это
function modify(req, res, next){
res.body = res.body + "modified";
next();
}
И use
после use
маршрутизатора. Таким образом, после выполнения всех ваших маршрутов вы можете изменить тело
Ответ 2
Я считаю, что OP фактически хочет изменить поток ответов, когда промежуточное программное обеспечение обработало запрос. Посмотрите на прилагаемую Compress промежуточную реализацию для примера того, как это делается. Connect monkey исправляет прототип ServerResponse
, чтобы выпустить событие header
, когда вызывается writeHead
, но до его завершения.
Ответ 3
Завершение ответа write, похоже, работало для меня с помощью Express 4. Это позволяет модифицировать тело ответа, даже когда оно является потоком.
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();
});
Просто убедитесь, что зарегистрировали это промежуточное программное обеспечение перед любым другим промежуточным программным обеспечением, которое может изменять ответ.
Ответ 4
express-mung предназначен для этого. Вместо событий это просто больше промежуточного ПО. Ваш пример будет выглядеть примерно так:
const mung = require('express-mung')
module.exports = mung.json(body => body.modifiedBy = 'me');
Ответ 5
Кажется, существует модуль для выполнения этого connect-static-transform
, проверьте его:
https://github.com/KenPowers/connect-static-transform
Соединение промежуточного программного обеспечения, которое позволяет преобразовывать статические файлы перед их обслуживанием.
И он поставляется с примерами, например этот.