Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t在发送后设置标头-内部循环_Javascript_Node.js_Api - Fatal编程技术网

Javascript Can';t在发送后设置标头-内部循环

Javascript Can';t在发送后设置标头-内部循环,javascript,node.js,api,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)

有人能帮我解决这段代码吗。 我想从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

for(var i=0;i我的理解是有人在调用您的API,然后您在循环中调用多个API,并且您希望将该数据发送给API的调用者

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

实现所需功能的最简单方法是将循环中得到的响应存储在外部数组中,然后在所有调用完成后,在
res.json
res.send

用于处理循环。使用
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或流之类的,但这正是您需要的。

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

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

实现所需功能的最简单方法是将循环中得到的响应存储在外部数组中,然后在所有调用完成后,在
res.json
res.send

用于处理循环。使用
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或流,但这正是您所需要的。

您不能为单个请求发送多个响应。HTTP遵循请求-响应模式为单个请求发送单次响应


错误:发送后无法设置标题意味着您已经处于正文或完成状态,但某些函数试图设置标题状态代码。也就是说,理想情况下,在您的情况下是循环

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


错误:发送后无法设置标题意味着您已经处于正文或完成状态,但是一些函数尝试设置标题状态代码。例如,理想情况下,您的情况是循环

ho-ho..非常感谢Dushyant Bangal,它现在正在工作,非常有用。谢谢。不客气。请勾选我答案左边的“标记为答案”,可能对其他人也有帮助。呵呵。非常感谢Dushyant Bangal,它现在起作用了,真的很有帮助。谢谢。不客气。请勾选我答案左边的“标记为答案”,可能对其他人也有帮助