从使用链接头的API获取所有页面的正确方法(使用JavaScript / NodeJS)

时间:2012-12-10 20:03:38

标签: javascript node.js github-api node-github link-header

我正在使用一个名为node-github的NodeJS模块,它是Github API的包装器,用于获取某些用户的统计信息,例如他们的关注者:

var getFollowers = function(user, callback) {
  github.user.getFollowers(user, function(err, res) {
    console.log("getFollowers", res.length);
    callback(err, res);
  });
};

...

getFollwers({user: mike}, function(err, followers) {
  if(err) {
    console.log(err);
  }
  else {
    console.log(followers);
  }
});

显然,Github将通话结果限制为最多100(通过per_page参数),并使用the Link header让您知道结果的“下一页”。

我正在使用的模块提供了几种简单的方法来处理链接头,因此您无需解析它。基本上,您可以拨打github.hasNextPage(res)github.getNextPage(res)(其中res是您从原始github.user.getFollowers()电话中收到的回复)

我正在寻找的是让我的函数返回由所有页面组成的所有结果的正确方法/范例。我用一个递归函数涉猎了一下,尽管它有效,但我还是忍不住觉得可能有更好的方法。

这个答案可以作为处理所有未来链接标头调用的好方法 - 不仅仅是Github - 如果标准有效。

谢谢!

1 个答案:

答案 0 :(得分:0)

最后,使用递归(记住递归的两个很大的弱点:维护它并解释它:))。这是我目前的代码,如果有人有兴趣的话:

var getFollowers = function(callback) {
  var followers = []
  ,  getFollowers = function(error, result) {
      followers = followers.concat(result);
      if(github.hasNextPage(result)) {
        github.getNextPage(result, getFollowers);
      }
      else {
        callback(error, followers);
      }
    };              

  github.user.getFollowers(options, getFollowers);
};

但是,我发现如果您只需要关注者的总数,您可以使用getLastPage函数来获取最后一页上的关注者数量,然后

total_num_of_followers = num_of_followers_on_last_page +(total_num_of_pages * results_per_page)