如何使用Axios从GitLab API获取所有数据?

时间:2019-02-11 15:42:13

标签: javascript vue.js axios gitlab-api

我想从我的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,我想加载下一页的数据?

1 个答案:

答案 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);
}