2011-08-13 57 views
0

我想知道是否有人能告訴我如何從mongodb獲取字符串值並將其存儲在變量中。將數據從MongoDB存儲到變量中 - mongoose和node.js

db.model("users").findOne({username: username, password: password}, {type:1}, 
    function(err, data) { 
     if(err) { 
      return "Error"; 
     } else if() { 
      return "No records"; 
     } else { 
      return data.type; 
     } 
    } 
); 

我運行這個時得到了類型值。

但是,如何將此函數存儲在此函數之外的變量中?

回答

2

您的匿名函數的返回值完全被忽略。您可以將變量存儲在可從當前作用域訪問的任何地方。例如。

var Database = function { 
    var myText = null; 

    return {  

    getUser: function(username, password, callback) { 
     db.model("users").findOne({username: username, password: password}, {type:1}, 
      function(err, data) { 
      if (err) { 
       myText = "Error"; 
      } 
      else if (data.length == 0) { 
       myText = "No records"; 
      } 
      else { 
       myText = data.type 
      } 

      $('.log').html(myText); 
      callback(myText); 
     }); 
    }; 
    }; 
}(); 

從server.js,然後你可以撥打:

Database.getUser(username, password, function(theText) { alert(theText); }); 

你需要聰明約元素是如何不同,因爲JavaScript一起回調互動不同步運行。這就是說,應該有可能實現你正在尋找的任何結果。享受和快樂的編碼!

+0

問題是我有一個Server.js文件,它調用Database.js文件中的getUserType函數。問題是我不知道如何從de database.js的值到server.js。 – chris

+0

你應該直接從Server.js傳回一個回調函數到'findOne'。由於MongoDB不同步,所以很難按照您所建議的方式傳遞變量。我建議不要將'findOne'封裝在database.js中,因爲MongoDB基於處理回調的最佳實踐(也就是說,您將回調傳遞到調用確切位置的'findOne')。也就是說,你可以通過在database.js中封裝並傳遞迴調來循環回調。那有意義嗎? – ghayes

+0

它確實:D我將把findOne函數放到服務器中並像那樣運行。我只是以爲我會分開與服務器的數據庫,所以一切看起來有點有序。 – chris

相關問題