从代理服务器获取响应

我使用node-http-proxy模块在node.js中创build了一个代理服务器。

看起来像这样:

var http = require('http'), httpProxy = require('http-proxy'), io = require("socket.io").listen(5555); var proxy = new httpProxy.RoutingProxy(); http.createServer(function (req, res) { proxy.proxyRequest(req, res, { host: 'localhost', port: 1338 }); }).listen(9000); 

所以,我需要在将响应发送回客户端之前,从我代理和分析的服务器获取主体。

但是我找不到事件或属性,我可以从中获取这些数据。 我试过了:

 proxy.on('end', function (data) { console.log('end'); }); 

但我无法想象我们如何从中获得哑剧的身体。

我find答案:我重写身体的响应函数 –

 var http = require('http'), httpProxy = require('http-proxy'), io = require("socket.io").listen(5555); var proxy = new httpProxy.RoutingProxy(); http.createServer(function (req, res) { console.log(req.url); res.oldWrite = res.write; res.write = function(data) { /* add logic for your data here */ console.log(data.toString('UTF8')); res.oldWrite(data); } proxy.proxyRequest(req, res, { host: 'localhost', port: 1338 }); }).listen(9000); 

这段代码将控制这个端点的所有url请求和响应。

如果您只想检查响应(只读),则可以使用:

 proxy.on('proxyRes', function(proxyRes, req, res){ proxyRes.on('data' , function(dataBuffer){ var data = dataBuffer.toString('utf8'); console.log("This is the data from target server : "+ data); }); }); 

但是请注意,在发送响应之后,会发出'proxyRes'事件。

参考: https : //github.com/nodejitsu/node-http-proxy/issues/382