expressionreq.pipe()不起作用
- 我想快速收听传入的POST请求。
- 我想将这个请求pipe道到另一台服务器
- 我想接收快速处理程序内的响应(我不想pipe响应表示资源stream)
现在我有以下代码:
app.post('server1',function(req,res,next){ var request = require('request'); req.pipe(request.post('server2')).pipe(res); }
所以这不起作用 – 请求甚至没有pipe道到服务器2 – 我检查了它,并没有传入的请求。
我解决了这样的点1和2:
var bodyParser = express.bodyParser(); app.use(function(req,res,next){ if(req.path == '/server1' && req.method == 'POST') { return next(); } else { bodyParser(req,res,next); } });
不是很好,但它的工作原理 – 它只是禁用一个单一的路由(POST / server1)bodyparser。
但我仍然不知道如何从pipe道请求获取JSON响应体 – 我有以下代码:
app.post('/server1',function(req,res,next){ var request = require('request'); var pipe = req.pipe(request.post('/server2')); pipe.on('end',function(){ var res2 = pipe.response; console.log(res2); }); });
res2
对象有正确的statusCode和标题等,但它不包含正文 – 我怎么能从res2
对象得到这个? /server2
在json中返回一些数据,但我不知道如何从响应中读取它…
它不起作用,因为bodyParser用parsing器拦截所有的主体
我想你快到了。 您应该监听pipe道上的data
事件以收集响应:
app.post('/server1',function(req,res,next) { var request = require('request'); var pipe = req.pipe(request.post('/server2')); var response = []; pipe.on('data',function(chunk) { response.push(chunk); }); pipe.on('end',function() { var res2 = Buffer.concat(response); console.log(res2); // don't forget to end the 'res' response after this! ... }); });
但是,由于您解决了“bodyParser()阻碍”问题,如果您只想返回由server2生成的响应(也请确保在使用request
时使用正确的URL),则还可以使用初始pipe道设置。