如何使用 Axios 从 GitLab API 获取所有数据?
How to fetch all data from GitLab API with Axios?
我想从我的 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,我想加载下一页的数据?
您首先要编写一个请求特定页面的函数,如下所示:
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);
}
我想从我的 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,我想加载下一页的数据?
您首先要编写一个请求特定页面的函数,如下所示:
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);
}