现在我有以下代码:
app.post('server1',function(req,res,next){
var request = require('request');
req.pipe(request.post('server2')).pipe(res);
}
Run Code Online (Sandbox Code Playgroud)
所以这不起作用 - 请求甚至没有通过管道传送到server2 - 我检查了它并且没有传入请求.
我解决了第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);
}
});
Run Code Online (Sandbox Code Playgroud)
不是很好,但它的工作原理 - 它只是为单个路径(POST/server1)禁用bodyparser.
但我仍然不知道如何从管道请求获取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);
});
});
Run Code Online (Sandbox Code Playgroud)
res2
对象具有正确的statusCode和标题等,但它不包含正文 - 我如何从res2
对象中获取此对象?/server2
在json中返回一些数据,但我不知道如何从响应中读取它...
我想你差不多了.您应该监听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!
...
});
});
Run Code Online (Sandbox Code Playgroud)
但是,由于您解决了"bodyParser()妨碍"问题,如果您只想返回server2生成的响应,也可以使用初始管道设置(同样,请确保在使用时使用正确的URL request
).
归档时间: |
|
查看次数: |
26605 次 |
最近记录: |