2016-10-10 7 views
0

Я пытаюсь использовать JavaScript и MongoDB, чтобы проверить, присутствует ли имя пользователя в наборе данных. Я ищу, чтобы он возвращал простое истинное или ложное утверждение. Я использую следующий синтаксис:JavaScript и MongoDB return undefined using Find()

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; 
      } 

    }); 

Однако, когда я вызываю функцию она только возвращает неопределенное значение вместо истинных или ложных показаний.

EDIT:

я называю уаг User = mongoose.model ('Пользователи') в верхней части сценария. Функция корректно выполняет операции conole.log(), однако она просто не возвращает результат, когда я выполняю var result = checkUserName (имя пользователя).

Большое спасибо

+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); 
      } 

    });