2017-04-02 72 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功能沒有定義。現在我有兩個問題:

  1. 爲什麼響應對象沒有定義?
  2. 是否有更好的方法來實現這種安排?

回答

0

res沒有定義的,因爲你忘了把它傳遞在內部調用。更改get_user_statuses(JSON.parse(body));get_user_statuses(JSON.parse(body), res);,它應該工作

+0

嘿謝謝你的迴應。我發現使用我的答案中提到的鏈接實現我的目標更優雅的方式。 –

相關問題