2016-10-10 52 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); 
      } 

    });