节点的请求不使用管道传递POST请求

时间:2016-09-13 13:50:45

标签: node.js express node-request

使用node / express和request编写的代理无法管道POST调用,GET似乎有效:

var pipeToTrustedZone = function(req, res){ 
    getEnrichedHeaders(req,function(err, headers){
    req.headers = headers;
    var url = proxiedServerPath + req.originalUrl;
    console.log(req.method+" TOWARDS");
    log.info(url);
    req.pipe(request({qs:req.query, uri: url })).pipe(res);
    });
}

上面的代码执行get请求,作为快速路由器中的中间件,但是在POST上,proxiedServer永远不会收到消息。

知道为什么以上不起作用?

此外,我的应用程序正在使用正文解析器中间件,因为并非所有端点都要代理:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

1 个答案:

答案 0 :(得分:0)

您必须在传递给headers 的对象中设置请求request(),并且res上设置相应的标头。这意味着你将无法简单地使它成为单线。例如:

req.pipe(request({
  qs: req.query,
  uri: url,
  headers: req.headers
})).on('response', function(pres) {
  res.writeHead(pres.statusCode, pres.headers);
  pres.pipe(res);
});