从代理服务器获取响应

Psy*_*cho 5 node.js node-http-proxy

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

看起来像这样:

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);
Run Code Online (Sandbox Code Playgroud)

因此,我需要在将响应发送回客户端之前从我代理并分析它的服务器获取正文.

但我无法找到事件或属性,我可以在哪里获得这些数据.我试过了:

proxy.on('end', function (data) {
    console.log('end');
});
Run Code Online (Sandbox Code Playgroud)

但我无法想象如何从中获取哑剧身体.

Fac*_*alm 8

如果你想做的就是检查响应(只读),你可以使用:

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

});
Run Code Online (Sandbox Code Playgroud)

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

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


Psy*_*cho 5

我找到了答案:我重写了身体的反应功能 -

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);
Run Code Online (Sandbox Code Playgroud)

此代码将控制此端点的所有URL请求和响应.