繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM