expressionreq.pipe()不起作用

  1. 我想快速收听传入的POST请求。
  2. 我想将这个请求pipe道到另一台服务器
  3. 我想接收快速处理程序内的响应(我不想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道设置。