Using Node JS to proxy http and modify response

一笑奈何 提交于 2020-01-13 01:43:08

问题


I'm trying to write a front end to an API service with Node JS (with which I am a relative beginner).

I'd like to be able to have a user point their browser at my node server and make a request. The node script would modify the input to the request, call the api service, then modify the output and pass back to the user.

I like the solution here (with Express JS and node-http-proxy) as it passes the cookies and headers directly from the user through my site to the api server.

proxy request in node.js / express

I see how to modify the input to the request, but i can't figure out how to modify the response. Any suggestions?


回答1:


Harmon is designed to plug into node-http-proxy https://github.com/No9/harmon It uses trumpet and so is stream based to work around any buffering problems. It uses an element and attribute selector to enable manipulation of a response.

This can be used to modify output response.

See here: https://github.com/nodejitsu/node-http-proxy/issues/382#issuecomment-14895039




回答2:


transformer-proxy could be useful here. I'm the author of this plugin and I'm answering here because I found this page when looking for the same question and wasn't satisfied with harmon as I don't want to manipulate HTML.

Maybe someone else is looking for this and finds it useful.




回答3:


http-proxy-interceptor is a middleware I wrote for this very purpose. It allows you to modify the http response using one or more transform streams. There are tons of stream-based packages available (like trumpet, which harmon uses), and by using streams you can avoid buffering the entire response.




回答4:


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


来源:https://stackoverflow.com/questions/13596942/using-node-js-to-proxy-http-and-modify-response

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!