2017-04-02 1 views
0

Ich verwende Facebook Graph NodeJS API, um user_posts abzurufen. Die Antwort hat eine Paginierung und daher muss ich die Antwort durchlaufen, um alle Posts abzurufen. Ich verwende Facebook-Beiträge folgende Route zu holen, und ich bin Schleife über Paginierung mit get_user_statuses Funktion:Response-Objekt ist nicht definiert, wenn es in einer Funktion übergeben

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 

    }); 
}); 

Das Problem ist, dass response Objekt aus einem ausdrücklichen route bestand nicht in get_user_statuses Funktion definiert ist. Jetzt habe ich zwei Frage:

  1. Warum Antwortobjekt nicht definiert ist?
  2. Gibt es einen besseren Ansatz, um diese Anordnung zu erreichen?

Antwort

0

res ist nicht definiert, weil Sie es in internen Anruf passieren vergessen. Ändern get_user_statuses(JSON.parse(body)); zu get_user_statuses(JSON.parse(body), res); und es sollte funktionieren

+0

Hey vielen Dank für die Antwort. Ich habe einen eleganteren Weg gefunden, mein Ziel zu erreichen, indem ich den in meiner Antwort erwähnten Link benutzte. –

Verwandte Themen