2016-04-14 9 views
0

Ich versuche, eine kleine Website mit NodeJS zu machen und ich JSON bin mit von http://www.mywebsite.com/jsonNodeJS: JSON gelesen und Variablen führen speichern

Das JSON wie folgt aussieht:

{ 
    "response:" { 
     name: "John", 
     age: 29,   
    } 

} 

Und meine App Js sieht wie folgt aus (ohne erfordern, app.set etc ..)

app.route('/add') 
    .get(function(req, res) { 
     var url = "http://www.mywebsite.com/json"; 
     var name; 
     var age; 

     request({ 
      url: url, 
      json: true 
     }, function(err, res, data) { 
      if(!err) { 
       name = data.response.name; 
       age = data.response.age; 
      } 
    });  

     res.render('add', { name:name, age:age }); 
    }) 

Warum mein Name und Alter Variablen sind beide undefiniert? Ich sah ähnliche Probleme und jemand sagte, dass Anfrage Methode asynchron ist und ich versuche, Ergebnis synchron zurückgeben, ist das richtig? Wie kann ich das Ergebnis synchron zurückgeben und in Variablen speichern?

Antwort

2

Denken Sie immer daran, dass eine Anforderung asynchron ist, müssen Sie warten, bis die Anfrage zum Rendern der Seite abgeschlossen ist. Eine Möglichkeit, dies zu tun, ist das Rendern der Seite in dem Rückruf der Anfrage:

app.route('/add') 
    .get(function(req, res) { 
    var url = "http://www.mywebsite.com/json"; 
    var name; 
    var age; 

    request({ 
     url: url, 
     json: true 
    }, function(err, res, data) { 
     if(!err) { 
      name = data.response.name; 
      age = data.response.age; 
     } 
     res.render('add', { name:name, age:age }); 
    });  

}) 
1

versuchen, für diese:

request({ 
      url: url, 
      json: true 
     }, function(err, res, data) { 
      if(!err) { 
       name = data.response.name; 
       age = data.response.age; 
       res.render('add', { name:name, age:age }); 
      } 
});