zze*_*zen 4 proxy http node.js
我正在使用node-http-proxy.但是,除了中继HTTP请求之外,我还需要监听传入和传出的数据.
拦截响应数据是我在努力的地方.节点的ServerResponse对象(更一般地说,WritableStream接口)不会广播'data'事件.http-proxy似乎创建了它自己的内部请求,它产生一个ClientResponse对象(它确实广播了'data'事件)但是这个对象不会公开地暴露在代理之外.
如果没有猴子修补node-http-proxy或在响应对象周围创建包装器,如何解决这个问题?
关于Github上node-http-proxy问题的相关问题似乎暗示这是不可能的.对于其他人未来的尝试,以下是我如何破解这个问题:
writeHead(),write()而对象的end()方法resres已经是EventEmitter,你可以开始发布新的自定义事件var eventifyResponse = function(res) {
var methods = ['writeHead', 'write', 'end'];
methods.forEach(function(method){
var oldMethod = res[method]; // remember original method
res[method] = function() { // replace with a wrapper
oldMethod.apply(this, arguments); // call original method
arguments = Array.prototype.slice.call(arguments, 0);
arguments.unshift("method_" + method);
this.emit.apply(this, arguments); // broadcast the event
};
});
};
res = eventifyResponse(res), outputData = '';
res.on('method_writeHead', function(statusCode, headers) { saveHeaders(); });
res.on('method_write', function(data) { outputData += data; });
res.on('method_end', function(data) { use_data(outputData + data); });
proxy.proxyRequest(req, res, options)
Run Code Online (Sandbox Code Playgroud)