NPM请求和多页面结果

时间:2016-04-21 14:32:26

标签: javascript express request

我在节点应用程序中使用express with request。这是我的请求函数

  var request = function (options, callback, args) {
    options.headers = {'User-Agent': 'RETRACTED'};
    options.url = config.api.git.base + '/orgs/RETRACTED/repos?access_token=' + config.tokens.git;

    remoteRequest(options, function (error, response, body) {
      if (!error) {
        callback(response, args);
      } else {
        throw error;
      }
    });
  };

我遇到的问题是GitHub API本身每页只提供30个结果。标题中的内容是:

Link:  
<https://api.github.com/organizations/RETRACTED/repos?access_token=RETRACTED&page=2>;rel="next", 
<https://api.github.com/organizations/RETRACTED/repos?access_token=RETRACTED&page=3>;rel="last"

现在,我可以通过在网址per_page=100中添加参数来解决这个问题,以确保获得我的组织拥有的60个回购。现在你可能已经注意到,这不是最好的解决方案,因为如果我们超过100,有人将不得不更新它。除了一切之外,我们还有几百个问题,我正在为它们使用相同的功能。

但这最多只能达到100.从github documentation我可以看到您可以使用?page参数指定更多页面

我会感谢任何提示,只要它们存在,如何请求下一页,将结果连接到我在那里的response变量,然后执行回调。

我记得在看到一个例子之前有人在做什么,但我似乎无法找到它,所以要么在google搜索时我的术语是关闭的,要么是我绊倒并且请求本身不能这样做?

编辑:我找到的一种解决方法(暂时没有网址验证)

var request = function (options, callback, args) {
    options.headers = {'User-Agent': 'RETRACTED'};

remoteRequest(options, function (error, response, body) {
  var links;

  if (!error) {

    if (response.headers.link) {
      links = response.headers.link.split(',');
      links.forEach(function (link) {
        if (link.indexOf('next') !== -1) {
          options.url = link.split(';')[0].replace(/[<>]/g,'');
          request(options, callback, args);
        }
      });
    }

    callback(response, args);
  } else {
    throw error;
  }
});
};

我不确定这是多少可行的解决方案,因为回调正在每个页面之后执行,在这种情况下我不介意那么多,因为只有简单的逻辑将其保存在数据库中。

0 个答案:

没有答案