![](/img/trans.png)
[英]API response is array of arrays. The first array being the key in key-value pair of an object
[英]Express API only returns first key value pair of object
我正在獲取嵌套對象數據。 我可以在控制台上獲取該對象數據,但是當我嘗試獲取像return res.json(imageObject)
這樣的數據時,我只能得到該對象的第一個鍵值對。 這是控制台的錯誤。 UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
。 控制台數據是這樣的{ bigImage: 'https://url.com' }
router.get("/", async(req, res) => { //...fetch data if (mediaData.type === "type1") { let allData = await mediaData.media; allData.map(async(Data) => { if (Data.imageType === "big") { let bigImage = await Data.url; let imageObject = { bigImage }; console.log(imageObject); return res.json(imageObject); } }); } });
您在.map
中使用res
,它將為您正在迭代的數組中的每個項目觸發一次。
你不能那樣做。 您只能對每個req
使用res
一次,因為您正在回復瀏覽器。 如果你多次使用它,你會得到這個錯誤,這意味着它已經被使用過並且你已經回復了。
解決方案:使用res
一次,而不是在map
。
此外, .map
在這里沒用,因為您對它產生的結果不感興趣。 您應該使用forEach
甚至更好的for
循環(在條件下可破壞)。
你應該使用for..of
。
它將在 return 語句處停止執行您的函數
router.get("/", async(req, res) => {
//...fetch data
if (mediaData.type === "type1") {
let allData = await mediaData.media;
let pendingResult = allData.filter(data => data.imageType === "big").map(async item => {
let bigImage = await item.url;
return { bigImage }
});
let result = await Promise.all(pendingResult);
res.json(result);
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.