Express API只返回对象的第一个键值对



我正在获取嵌套对象数据。我可以在控制台上获取该对象的数据,但当我尝试获取像return res.json(imageObject)这样的数据时,我只会获得该对象的第一个键值对。这是控制台的错误。CCD_ 2。控制台数据类似于{ 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

它将在返回语句处停止执行您的函数

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);
}
});

最新更新