使用Node JS进行HTTP代理并修改响应

8

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

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

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

在node.js / express中代理请求

我知道如何修改请求的输入,但我无法弄清楚如何修改响应。有什么建议吗?


你找到了怎么做这个吗? - Phil
4个回答

5

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

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


4

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接