Промежуточное программное обеспечение Connect или Express для изменения response.body - PullRequest
29 голосов
/ 27 марта 2012

Я хотел бы иметь функцию промежуточного программного обеспечения, которая изменяет тело ответа.

Это для экспресс-сервера.

Что-то вроде:

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

  next();
}

express.use(modify);

Я не понимаю, какое событие слушать. Буду признателен за любую помощь или документацию.

Ответы [ 5 ]

21 голосов
/ 28 марта 2012

Вам не нужно слушать какие-либо события. Просто сделай это

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

  next();
}

И use это после вас use роутер. Таким образом, после выполнения всех ваших маршрутов вы можете изменить тело

17 голосов
/ 27 февраля 2013

Я полагаю, что OP действительно хочет изменить поток ответов после обработки запроса промежуточным программным обеспечением.Посмотрите на реализацию промежуточного программного обеспечения Compress для примера того, как это делается.Connect monkey исправляет прототип ServerResponse, чтобы вызвать событие header при вызове writeHead, но до его завершения.

7 голосов
/ 09 декабря 2015

Экспресс-мунг предназначен для этого. Вместо событий это просто промежуточное ПО. Ваш пример будет выглядеть примерно так:

const mung = require('express-mung')

module.exports = mung.json(body => body.modifiedBy = 'me');
4 голосов
/ 24 ноября 2015

Переписывание метода ответа 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();
});

Просто зарегистрируйте этопромежуточное ПО перед любым другим промежуточным ПО, которое может изменять ответ.

2 голосов
/ 21 января 2015

Кажется, есть модуль для этого, который называется connect-static-transform, проверьте его:

https://github.com/KenPowers/connect-static-transform

Промежуточное программное обеспечение для подключения, которое позволяет преобразовывать статические файлы перед их обслуживанием.

И это идет с примерами, такими как этот .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...