连接或Express中间件来修改response.body

问题描述 投票:31回答:5

我想拥有一个修改响应主体的中间件功能。

这是用于快速服务器。

类似:

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

  next();
}

express.use(modify);

我不知道该听什么事件。任何帮助或文档将不胜感激。

node.js express connect
5个回答
23
投票

您无需收听任何事件。只要做到

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

  next();
}

然后在路由器use之后输入use。这样,在执行完所有路线后,您可以修改主体


17
投票

我相信,一旦中间件处理了请求,OP实际上就想修改响应流。查看捆绑的Compress中间件实现,以获取有关如何完成此操作的示例。连接猴子修补程序ServerResponse原型,以在调用header时但未完成时发出writeHead事件。


9
投票

express-mung是为此设计的。除了事件,它还有更多的中间件。您的示例如下所示:

const mung = require('express-mung')

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

5
投票

用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();
});

只需确保先注册此中间件,然后再配置其他任何可能正在修改响应的中间件。


2
投票

似乎有一个用于执行此操作的模块称为connect-static-transform,请签出:

connect-static-transform

连接中间件,允许在提供静态文件之前对其进行转换。

并且附带示例,例如https://github.com/KenPowers/connect-static-transform


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.