NodeJS 连接或Express中间件来修改响应,body [已关闭]

slmsl1lt  于 2023-05-17  发布在  Node.js
关注(0)|答案(5)|浏览(135)

**已关闭。**此问题正在寻求书籍、工具、软件库等的建议。它不符合Stack Overflow guidelines。目前不接受答复。

我们不允许问题寻求书籍,工具,软件库等的建议。您可以编辑问题,以便可以用事实和引用来回答。
2天前关闭。
截至2天前,社区正在审查是否重新讨论此问题。
Improve this question
我想有一个中间件功能,修改响应体。
这是一个快速服务器。
类似于:

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

  next();
}

express.use(modify);

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

omvjsjqw

omvjsjqw1#

您不需要监听任何事件。快去吧

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

  next();
}

use它之后,你use路由器。这样,在所有的路由都执行之后,您就可以修改正文了

8qgya5xd

8qgya5xd2#

我相信OP实际上希望在中间件处理完请求后修改响应流。请看捆绑的Compress中间件实现,以了解如何完成此操作。Connect monkey对ServerResponse原型进行修补,以便在调用writeHead时发出header事件,但在完成之前。

cnh2zyt3

cnh2zyt33#

express-mung就是为此而设计的。而不是事件,它只是更多的中间件。您的示例将类似于

const mung = require('express-mung')

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

bjp0bcyl4#

覆盖响应的write方法在Express4中似乎对我很有效。这允许修改响应的主体,即使它是一个流。

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

只需确保在任何其他可能修改响应的中间件之前注册此中间件。

lyr7nygr

lyr7nygr5#

似乎有一个叫做connect-static-transform的模块可以做到这一点,看看吧:
https://github.com/KenPowers/connect-static-transform
一个连接中间件,允许在提供静态文件之前对其进行转换。
而且它还附带了例子,比如this one

相关问题