我使用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);
所以,我需要在将响应发送回客户端之前从我代理并分析它的服务器获取正文。
但我无法找到事件或属性,我可以在哪里获取此数据。我试过了:
proxy.on('end', function (data) {
console.log('end');
});
但是我无法想象如何从中获取mime身体。
答案 0 :(得分: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);
});
});
但请注意,' proxyRes'发送响应后发出事件。
答案 1 :(得分:6)
我找到答案: 我重写了body的响应函数 -
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请求和响应。
答案 2 :(得分:0)
基于@Psycho的答案,以下代码也可以用于修改标头
var server = http.createServer(function(req, res) {
res.oldWrite = res.write;
res.write = function(data) {
console.log(data.toString('UTF8'));
res.oldWrite(data);
}
res.oldSetHeader = res.setHeader
res.setHeader = function(k,v) {
console.log(k,v)
res.oldSetHeader(k,v)
}
proxy.web(req, res, { target: proxyPool[key]}); })