2017-04-02 7 views
0

Facebook Graph NodeJS APIを使用してuser_postsを取得しています。応答はページネーションを持っているので、すべての投稿を取得するために応答をループする必要があります。私はFacebookの投稿を取得するために、次のルートを使用していると私はget_user_statuses機能を使用して改ページをループしています:応答オブジェクトが関数に渡されたときに定義されていません

var posts = ""; 

function get_user_statuses(response_posts, res) { 

    var link_regex = /https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,}/g; 
    var isNextPageAvailable = true; 

    if ("paging" in response_posts) { 
     var nextPage = response_posts.paging.next; 
     isNextPageAvailable = true; 

    } else { 
     isNextPageAvailable = false; 
    } 

    for (var i = 0; i < response_posts.data.length; i++) { 

     var post = response_posts.data[i].message + " "; 

     if ("message" in response_posts.data[i]) { 
      posts += post.replace(link_regex, ""); 
     } 
    } 

    if (nextPage !== undefined) { 
     request(nextPage, function (error, response, body) { 

      if (!error && response.statusCode === 200) { 
       get_user_statuses(JSON.parse(body)); 

      } else { 
       console.log(error); 
      } 
     }); 
    } 

    if (!isNextPageAvailable){ 
     //Sending posts to facebook Modal 
     console.log(posts); 
     res.send(JSON.stringify({posts: posts})); //res is not defined here 
    } 
} 

router.post('/fbData', function (req, response, next) { 

    FB.setAccessToken(req.body.access_token); 
    FB.api('/me?fields=posts&posts.limit=1000', function (res) { 

     if (!res || res.error) { 
      if (!res) { 
       response.send(JSON.stringify({error: 'An error occurred. Please try again.'})) 
      } 
      response.send(JSON.stringify({error: response.error})); 
      return; 
     } 

     get_user_statuses(res.posts, response); //Passing response object here 

    }); 
}); 

問題は明示routeから渡されたresponseオブジェクトがget_user_statuses機能で定義されていないということです。今私は2つの質問があります:

  1. なぜ応答オブジェクトが定義されていませんか?
  2. この配置を達成するためのより良いアプローチがありますか?

答えて

0

resが定義されていません。 get_user_statuses(JSON.parse(body));get_user_statuses(JSON.parse(body), res);に変更すると動作するはずです

+0

お返事ありがとうございます。私は私の答えに記載されたリンクを使用して私の目的を達成するよりエレガントな方法を見つけた。 –

0

私は私の問題を解決しました。コールバックを使って関数を作成する必要がありました。場合には他の誰がこの種の問題で立ち往生している、このポストは私がそれを解決する助け:あなたが内部コールでそれを渡すのを忘れているので

[How to recurse asynchronously over API callbacks in node.js?

関連する問題