使用 Node JS 代理 http 并修改响应



我正在尝试使用 Node JS 编写 API 服务的前端。

我希望能够让用户将他们的浏览器指向我的节点服务器并发出请求。 节点脚本将修改请求的输入,调用 api 服务,然后修改输出并传回用户。

我喜欢这里的解决方案(使用 Express JS 和 node-http-proxy),因为它将 cookie 和标头直接从用户通过我的网站传递到 api 服务器。

节点中的代理请求.js/快递

我看到如何修改请求的输入,但我不知道如何修改响应。 有什么建议吗?

transformer-proxy 在这里可能很有用。我是这个插件的作者,我在这里回答是因为在寻找相同的问题时找到了这个页面,并且对 harmon 不满意,因为我不想操纵 HTML。

也许其他人正在寻找这个并发现它很有用。

Harmon旨在插入node-http-proxy https://github.com/No9/harmon它使用小号,因此基于流来解决任何缓冲问题。它使用元素和属性选择器来启用响应的操作。

这可用于修改输出响应。

看这里: https://github.com/nodejitsu/node-http-proxy/issues/382#issuecomment-14895039

var httpProxy = require('http-proxy');
var modifyResponse = require('http-proxy-response-rewrite'); 
var proxy = httpProxy.createServer({
      target:'target server IP here',
        });
  proxy.listen(8001);
  proxy.on('error', function (err, req, res) {
  res.writeHead(500, {
  'Content-Type': 'text/plain'
});
res.end('Something went wrong. And we are reporting a custom error message.');
 });
proxy.on('proxyRes', function (proxyRes, req, res) {
modifyResponse(res, proxyRes.headers['content-encoding'], function (body) {
    if (body && (body.indexOf("<process-order-response>")!= -1)) {
        var beforeTag = "</receipt-text>"; //tag after which u can add data to 
                                                              //       response
        var beforeTagBody = body.substring(0,(body.indexOf(beforeTag) + beforeTag.length));
              var requiredXml = " <ga-loyalty-rewards>n"+
                                 "<previousBalance>0</previousBalance>n"+
                                 "<availableBalance>0</availableBalance>n"+
                                 "<accuruedAmount>0</accuruedAmount>n"+
                                 "<redeemedAmount>0</redeemedAmount>n"+                                   
                                 "</ga-loyalty-rewards>";
     var afterTagBody = body.substring(body.indexOf(beforeTag)+  beforeTag.length)+
     var res = [];
     res.push(beforeTagBody, requiredXml, afterTagBody);    
     console.log(res.join(""));
     return res.join("");
    }
    return body;
   });
});

http-proxy-interceptor 是我为此目的编写的中间件。它允许您使用一个或多个转换流修改 http 响应。有大量基于流的包可用(如 trumpet,haron 使用),通过使用流,您可以避免缓冲整个响应。

最新更新