2016-10-10 51 views
0

我正在嘗試使用JavaScript和MongoDB來檢查用戶名是否存在於數據集中。我期待它能夠返回一個簡單的真或假的陳述。我正在使用以下語法:使用Find()返回undefined JavaScript和MongoDB

checkUserName = function (usernameIn) { 

    User.findOne({username: usernameIn}, function(err, item) { 
    if (err) throw err; 
      if(item === null) { 
       console.log("Does not exist") 
       return false; 
      } 
      else { 
       console.log("Username already exists.") 
       return true; 
      } 

    }); 

但是,當我調用該函數時,它只返回未定義,而不是true或false語句。

編輯:

我在做劇本的頂部調用VAR用戶= mongoose.model( '用戶')。該函數確實正確地執行了conole.log()操作,但是當我執行var result = checkUserName(username)時,它不會返回結果。

非常感謝

+0

看來,「用戶」的對象不是在函數內部訪問。 –

+0

很多道歉,我叫var User = mongoose.model('Users');在函數的頂部。 console.log()事件被正確觸發,但函數的返回值只是未定義的。 – Dan

+1

這是因爲數據庫操作是異步的。您將不得不使用承諾或回調來確保在您嘗試使用該函數的返回時,數據庫讀取完成。 –

回答

0
Try This: 

Write a callback to a function when it is called. 

checkUserName = function (usernameIn,callback) { 

    User.findOne({username: usernameIn}, function(err, item) { 
    if (err) throw err; 
      if(item === null) { 
       console.log("Does not exist") 
       return callback(false); 
      } 
      else { 
       console.log("Username already exists.") 
       return callback(true); 
      } 

    });