2017-08-23 27 views
1

有人可以幫我解決我的一段代碼。 我想從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 

..finally有像以上職稱的錯誤消息,因爲res.send具有發送兩次(內循環),我不知道解決這個問題的最好辦法。

在此先感謝

回答

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或類似的東西流,但這是你所需要的。

+0

ho ho ..感謝這麼多Dushyant Bangal,它現在工作,真的很有幫助。謝謝.. – Onyot

+0

不客氣。請檢查我的答案左邊的勾號以「將其標記爲答案」,可能也會幫助其他人 –

0

您無法針對單個請求發送多個回覆。 HTTP如下請求 - 響應模式對單個請求的單個響應。

錯誤:無法設置頭,他們被送到後意味着你的身體或成品的狀態是已經,但有些函數試圖設置的StatusCode。即理想情況下,您的情況是循環

+0

好吧謝謝消化不良@Bharathvaj Ganesan – Onyot

相關問題