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

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

最佳答案

您首先要编写一个请求特定页面的函数,如下所示:

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

关于javascript - 如何使用 Axios 从 GitLab API 获取所有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54634123/

相关文章:

javascript - 如何打印对象中的嵌套对象值? VueJs

typescript - 如何将 Vue 插件包含到 Vue TypeScript 的模板中?

javascript - axios get 请求的控制台日志放在哪里?

javascript - 在 JavaScript 中安排任务(Node webkit 项目)

javascript - 第二只动画眼睛的重复代码

javascript - Jquery:获取连续td的宽度数组

javascript - 使用 vue 中的 Props 从子模态数据更新父数据

javascript - 为什么 axios.get 没有返回 promise

html - 使用 React 应用程序的 get 方法在 Material UI 表中显示数据

javascript - Bootstrap 模式根据 Chrome 中的背景高度多次打印同一页面