发送后无法设置标头 - 内部循环

时间:2017-08-23 09:15:31

标签: javascript node.js api

有人可以帮我解决我的代码。 我想从nodejs API发送循环内的数据,在我发送之后出现错误消息“无法在发送后设置标题”。

..这是我的代码:

for (var i =0;i<req.body.stuff.length;i++){
 var arrStuff  = req.body.stuff[i];
 var getUrl    = 'https://someurl/' + arrStuff

 request.get(getUrl,
    function(error,response,body) {
      if (!error && response.statusCode == 200){

        rowData = JSON.parse(body)

        res.send(rowData) // send data to client

      }; // if (!error)

    } // function(error,response,body)
  ); // request.get(getUrl

..终于得到了错误消息,如上面的标题,因为res.send发送了两次(内部循环),我不知道解决它的最佳方法。

提前致谢

2 个答案:

答案 0 :(得分:0)

我的理解是有人在调用您的API,然后您在循环中调用多个API,并且您希望将该数据发送到您的API调用者。

您不能多次res.send次。一旦执行,API调用就完成了。您已经发送了回复。

实现您想要的最简单方法是将您在环路中获得的响应存储在外部数组中,然后在完成所有调用后,在res.jsonres.send中发送数组

使用async.js来处理循环。使用async.concat,您不必自己维护外部阵列。

async.concat(req.body.stuff, function(arrStuff,callback){

 var getUrl    = 'https://someurl/' + arrStuff

 request.get(getUrl,
    function(error,response,body) {
      if (!error && response.statusCode == 200){

        rowData = JSON.parse(body)

        callback(null, rowData) // replace null by err to stop if err

      }; // if (!error)

    } // function(error,response,body)
  ); // request.get(getUrl

}, function(err, allData) {
    res.send(allData)
});

还有其他方法,如socket.io或类似流,但这就是你需要的。

答案 1 :(得分:0)

您无法为单个请求发送多个回复。 HTTP 遵循请求 - 响应模式单个请求的单一响应。

错误:在发送标题后无法设置标题表示您已处于正文或已完成状态,但某些功能尝试设置 标题 statusCode 。即理想情况下是循环