我正在从远程API解析JSON数据。我正在使用的特定端点返回我想要的所有值,例如标题,描述,摘要和封面。我希望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);
});
我将封面ID存储在变量imageId中。如何使用它显示每个游戏的相应对象引用?
答案 0 :(得分:1)
以下是使用async / await执行两个请求并根据gameId匹配封面的示例。
const axios = require('axios');
(async () => {
const links = (await axios({
url: "https://api-v3.igdb.com/covers",
method: 'GET',
headers: {
'Accept': 'application/json',
'user-key': 'xxxx'
},
data: "fields game,url"
}).catch(err => {
console.error(err);
})).data
const response = await axios({
url: "https://api-v3.igdb.com/games",
method: 'GET',
headers: {
'Accept': 'application/json',
'user-key': 'xxxx'
},
data: "fields dlcs,name,summary,url,cover,popularity;sort popularity desc;limit 13;"
}).catch(err => {
console.error(err);
})
/* 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;
//Find the cover based on the game id
var link = links.find(l => l.game === r[i].dlcs).url
var imageId = r[i].cover;
//Push values onto homeCards
homeCards.push({
title: title,
link: link,
description: description,
});
}
})()
编辑: 在评论中回答您的问题。 Array.prototype.find将回调函数作为其第一个参数。在上面的代码片段中,我使用了ES6 Arrow Function作为回调传递,以查找等效于以下内容的
links.find(function(l) {
var boolean = l.game === r[i].dlcs
return boolean
}).url
答案 1 :(得分:0)
大家好,感谢您的帮助。答案比我要容易得多,在阅读文档时这是我的坏选择。您所要做的就是在axios函数中指定子字段。
data: "fields name,summary,url,cover,popularity,cover.url;sort popularity desc;limit 13;"
cover.url带给我每个游戏的图片网址