Javascript Node.js-从JSON对象引用解析图像

Javascript Node.js-从JSON对象引用解析图像,javascript,node.js,json,api,Javascript,Node.js,Json,Api,我正在解析来自远程API的JSON数据。我使用的特定端点返回我想要的所有值,如title、description、summary和cover。我希望cover字段是一个带有jpg url的字符串,但它会返回一个对象引用id。如果您发出另一个请求并传递对象id,url字符串就在那里。如何在不调用其他端点的情况下解析图像数据?我正在使用IGDB API并遵循他们的文档。 这是我的密码 const axios = require('axios'); axios({ url: "https:

我正在解析来自远程API的JSON数据。我使用的特定端点返回我想要的所有值,如title、description、summary和cover。我希望cover字段是一个带有jpg url的字符串,但它会返回一个对象引用id。如果您发出另一个请求并传递对象id,url字符串就在那里。如何在不调用其他端点的情况下解析图像数据?我正在使用IGDB API并遵循他们的文档。 这是我的密码

    const axios = require('axios');
axios({
  url: "https://api-v3.igdb.com/games",
  method: 'GET',
  headers: {
      'Accept': 'application/json',
      'user-key': 'xxxx'
  },
  data: "fields name,summary,url,cover,popularity;sort popularity desc;limit 13;"
})
  .then(response => {
    /* GET home page. */
    router.get('/', (req, res, next) => {
      res.render('index', { pageId: 'index',
                        title: 'Homepage',
                        cards: homeCards
        });
    });
    //Iterate through the JSON array
    let r = response.data;
    console.log(response.data); 
    for (i=0; i<r.length; ++i){
      //Store json values 
        var title = r[i].name;
        var description = r[i].summary;
        var link = r[i].url;
        var imageId = r[i].cover;
        //Push values onto homeCards
        homeCards.push({
          title: title,
          link: link,
          description: description,
        });
      }

  })
  .catch(err => {
      console.error(err);
  });
const axios=require('axios');
axios({
url:“https://api-v3.igdb.com/games",
方法:“GET”,
标题:{
“接受”:“应用程序/json”,
“用户密钥”:“xxxx”
},
数据:“字段名称、摘要、url、封面、流行度;排序流行度描述;限制13
})
。然后(响应=>{
/*获取主页*/
路由器.get(“/”,(请求、恢复、下一步)=>{
res.render('index',{pageId:'index',
标题:"网页",,
卡片:家庭卡片
});
});
//遍历JSON数组
设r=响应数据;
console.log(response.data);
对于(i=0;i{
控制台错误(err);
});

我将封面id存储在变量imageId中。如何使用它来显示每个游戏对应的对象引用?

以下是使用async/await执行两个请求并基于gameId匹配封面的示例

const axios=require('axios');
(异步()=>{
常量链接=(等待axios)({
url:“https://api-v3.igdb.com/covers",
方法:“GET”,
标题:{
“接受”:“应用程序/json”,
“用户密钥”:“xxxx”
},
数据:“场游戏,网址”
}).catch(错误=>{
控制台错误(err);
})).数据
常数响应=等待axios({
url:“https://api-v3.igdb.com/games",
方法:“GET”,
标题:{
“接受”:“应用程序/json”,
“用户密钥”:“xxxx”
},
数据:“字段数据链接、名称、摘要、url、封面、流行度;排序流行度描述;限制13
}).catch(错误=>{
控制台错误(err);
})
/*获取主页*/
路由器.get(“/”,(请求、恢复、下一步)=>{
res.render('index',{pageId:'index',
标题:"网页",,
卡片:家庭卡片
});
});
//遍历JSON数组
设r=响应数据;
console.log(response.data);
对于(i=0;i l.game==r[i].dlcs).url
var imageId=r[i]。封面;
//将值推到HomeCard上
homeCards.push({
标题:标题,,
链接:链接,
描述:描述,
});
}

})()
大家好,谢谢你们的帮助。答案比我想象的要简单得多,而且在阅读文档时我的回答不好。您所要做的就是在axios函数中指定子字段

data: "fields name,summary,url,cover,popularity,cover.url;sort popularity desc;limit 13;"

cover.url为我提供了每个游戏的图像url

根据他们的API文档,这是不可能的。始终需要对cover端点进行第二次调用。明白了,我该如何进行此调用?我当前的axios函数中是否嵌套了另一个axios函数?程序如何知道哪个图像属于哪个游戏?我建议使用async/await而不是嵌套承诺。我很喜欢你的答案,但我需要帮助你理解如何根据游戏ID找到封面。你能更详细地解释这一行吗:var link=links.find(l=>l.game==r[I].dlcs).url。特别是paraenthesis中的代码。Arrow函数可能看起来有点奇怪。在进一步挖掘文档后,我意识到图像没有端点。它只是列在参考下面。在他们的github上,他们建议使用api包装来解析图像。以下是链接:文档提到了som这叫做扩展器,用来合并多个请求。我想这就是我要找的。我会做一些编辑,如果这是正确的答案,我会回复你们的