我想从我的GitLab实例托管的所有项目中获取数据。现在我知道GitLab默认显示20个项目,因此我需要设置每页显示的实例数更多:
https://gitlab-repo.com/api/v4/projects?per_page=100
因此会导致相应的axios代码:
const url='https://gitlab-repo.com/api/v4/projects?per_page=100'
const vm = new Vue({
el: "#app",
data: {
results: [],
loading: true,
errored: false
},
mounted() {
axios
.get(url)
.then(response => (this.results = response.data))
.catch(error => {
console.log(error)
this.errored = true
})
.finally(() => this.loading = false)
}
})
问题是,GitLab每页最多可以显示100个项目,而我拥有的项目更多。
我曾考虑过在axios的get函数的params
部分中为实例(项目)的数量设置条件,但无法确定如何编写。
如何在axios请求中指示如果项目数大于100,我想加载下一页的数据?
答案 0 :(得分:1)
您首先要编写一个请求特定页面的函数,如下所示:
function getPage(page) {
let url = `https://gitlab-repo.com/api/v4/projects?per_page=100&page=${page}`;
return axios
.get(url)
.then(response => (response.data))
}
如果您的环境中有async/await
,那么我会做类似的事情,继续请求下一页,直到结果为<100个结果
let resultCount = 100;
let results = [];
let page = 1;
while (resultCount === 100) {
let newResults = await getPage(page);
page++;
resultCount = newResults.length;
results = results.concat(newResults);
}