【发布时间】:2013-09-10 20:19:52
【问题描述】:
- 我想在 express 中监听传入的 POST 请求。
- 我想将此请求通过管道传送到另一台服务器
- 我想在 express 处理程序中接收响应(我不想通过管道将响应传递给 express res 流)
现在我有以下代码:
app.post('server1',function(req,res,next){
var request = require('request');
req.pipe(request.post('server2')).pipe(res);
}
所以这不起作用 - 请求甚至没有通过管道传输到 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);
}
});
不是很好,但它可以工作 - 它只是为单个路由 (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);
});
});
res2 对象具有正确的 statusCode 和标头等,但它不包含正文 - 我如何从 res2 对象中获取它? /server2 在 json 中返回一些数据,但我不知道如何从响应中读取它...
【问题讨论】:
-
这可能意味着
req已经被读到完成——读到它的'end'——可能是bodyParser()。此后,流不会重新启动新的.pipe()。 -
那么我怎样才能让它不被读完呢?或者我如何从已经读取的请求中创建一个流?我必须通过管道请求,因为那里有文件上传......
-
我编辑了我的问题 - 您对
bodyParser的评论对我帮助很大 - 我只需要解决最后一点 (3)。 -
@JonathanLonowski 在进行了一些更改(包括为所有端点配置正文解析器)后,我所有的帖子请求都停止了管道传输。不知道如果它我的头撞在桌子上多久了不是为了你的评论 - 谢谢! :-)