2014-04-27 39 views
0

我對NodeJs非常陌生,我正在製作一個快速應用程序來學習,在這個應用程序中,我想利用用戶提供的經度和緯度來通過節點地理編碼器反向地址解析地址,下面的代碼允許我將模型保存在數據庫中。我想讓用戶知道過程是否成功,我如何從save函數中的狀態獲取值並將其傳遞給響應?如何從NodeJS的回調函數中獲取值?

在此先感謝。

app.post('/persons', function (req, res){ 
    var createPersonWithGeocode = function (callback){ 
    var lat=req.body.latitude; 
    var lon=req.body.longitude; 
    var status; 
    function geocodePerson() { 
     geocoder.reverse(lat,lon,createPerson); 
    } 
    function createPerson(err, geo) { 
     var geoPerson = new Person({ 
      name:  req.body.name, 
      midname: req.body.midname, 
      height:  req.body.height, 
      gender:  req.body.gender, 
      age:  req.body.age, 
      eyes:  req.body.eyes, 
      complexion: req.body.complexion, 
      hair:  req.body.hair, 
      latitude: req.body.latitude, 
      longitude: req.body.longitude, 
      geocoding: JSON.stringify(geo), 
      description:req.body.description, 
     }); 
     geoPerson.save(function (err) { 
      if (!err) { 
       console.log("Created"); 
       status="true"; 
      } else { 
       console.log(err); 
       status="false"; 
      } 
     }); 
    } 
    geocodePerson(); 
    } 
    return res.send(createPersonWithGeocode()); 
}); 
+0

讓我猜一猜:你還需要掌握異步編碼的概念嗎? (這裏有一段時間,使用它們:............) – MaxArt

+0

感謝您的回答最大。我對這段時間感到抱歉,但英語不是我的第一語言(雖然不是藉口)。再次感謝您的幫助:) – torresomar

+0

不客氣。而且你的英語畢竟還好(但是,嘿,我也不是英語母語的人)。 – MaxArt

回答

2

如果您沒有對回調函數進行任何操作,則永遠無法獲得響應狀態。首先:

geoPerson.save(function (err) { 
    if (!err) { 
     console.log("Created"); 
     status="true"; 
    } else { 
     console.log(err); 
     status="false"; 
    } 
    callback(status); 
}); 

現在你應該提供一個回調函數來發送響應。取而代之的

return res.send(createPersonWithGeocode()); 

你應該做的

createPersonWithGeocode(function(status) { 
    res.send(status); 
}); 

這就是代碼的異步工作。

+0

謝謝像魅力一樣工作。在發佈問題之前,我嘗試了類似的方法,但不知怎的,我搞砸了。我將不得不詳細瞭解如何正確使用回調。 – torresomar

+0

@OmarTorres是的,的確,如果您需要使用NodeJS進行編碼,那絕對是您必須信任的最基本的東西。使用NodeJS,* everything *必須是異步的,這導致許多編碼人員因這種新的編碼原理而變得瘋狂。雖然有些工具可以幫助你(即Promises)。 – MaxArt

相關問題