2012-12-10 5 views
0

나는 에 대한 래퍼 인 node-github이라는 NodeJS 모듈을 사용하여 다음과 같이 특정 사용자에 대한 통계를 얻습니다. 그들의 추종자 :링크 헤더 (JavaScript/NodeJS 사용)를 사용하는 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에서 제한합니다 (per_page 매개 변수를 통해) (100)의 최대 결과를 호출하고 결과를 '다음 페이지'가 존재 알려 the Link header를 사용합니다.

내가 사용하고있는 모듈은 링크 헤더를 처리하는 몇 가지 쉬운 방법을 제공하므로 구문 분석 할 필요가 없습니다. 기본적으로, 당신은 호출 할 수 있습니다 github.hasNextPage(res) 또는 github.getNextPage(res)

(res는 원래 github.user.getFollowers()를 호출하여받은 응답 임) 내가 무엇을 찾고 있어요 것은 모든 페이지 구성 내 기능은 모든 결과를 반환 할 필요에 대한 올바른 접근 방식/패러다임이다 . 재귀 함수를 조금 썼는데, 작동하지만 더 나은 접근 방법이 될 수 있다고 생각하지만 도움이되지 않습니다.

이 답변은 Github의 표준이 아닌 다른 모든 링크 헤더 호출을 처리하는 좋은 접근 방법이 될 수 있습니다.

감사합니다.

+0

당신은 추종자를 방출하는 사용자 정의 읽을 스트림을 생성하는 생각 해 봤나? – AndyD

+0

@AndyD 정교하게 주시겠습니까? –

답변

0

마지막으로 재귀에 의존합니다 (재귀의 두 가지 큰 약점을 기억하십시오 : 유지 관리 및 설명). 여기에 사람이 관심이 있다면 내 현재 코드가있다 : 당신이 단지 추종자의 총 수를 필요로하는 경우, 마지막 페이지에서 추종자의 수를 얻기 위해 getLastPage 기능을 사용할 수 있다는 것을 발견,

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

을하지만, 및 다음

total_num_of_followers = num_of_followers_on_last_page + (total_num_of_pages * results_per_page는)