2017-01-22 4 views
1

В последнее время я работаю над системой аутентификации, которая должна либо создать нового пользователя, если не существует пользователя с данным ID ИЛИ загружает пользователя с существующим Я БЫ. Я тоже уже понял, что вы можете вернуться, существует ли или нет пользователь с в ID с помощьюИспользование функции схемы Mongoose Внутри экспортированной модели Mongoose

User.count({_id: id}, function (err, count){ 
    if(count > 0){ 
     // User exists, continue with loading data 
    } else { 
     // User does not exist, create one 
    } 
    }); 

с пользователем будучи экспортированной Mongoose Модель mongoose.model('User', UserSchema);

Если я создал функцию existsWithId (ID) в моем app.js теперь, это было бы работа отлично отлично (судя по тому, что упомянутый выше код работает отлично,), но я хочу переместить эту функцию в мою модель user.js (которая содержит код Mongoose/MongoDB) вместо этого, чтобы у меня это было только для этой конкретной модели. Всякий раз, когда я пытаюсь сделать это с помощью

UserSchema.statics.existsWithId = function(id) { 
    this.count({_id: id}, function (err, count){ 
    return count > 0; 
    }); 
} 

или подобных методов, хотя, это будет либо просто вернуть неопределенной или ошибку, когда я запустить его внутри моего app.js.

Примечание: Я сожалею, если это является своего рода простой или даже глупый вопрос, но я довольно новый рассматривает управление БД с Mongoose и в то время как у меня есть НЕКОТОРУЮ опыт работы с JS, я не совсем профессионально в этом.

Если кому-либо из вас нужен дополнительный код для ответа на вопрос, не стесняйтесь спрашивать меня, и я сделаю это. Кроме того, я не могу + респ ответы, но я всегда ценю им, :)

ответ

0

Ваш метод existsWithId возвращает значение асинхронно, так что вы можете дать обратный вызов к нему, чтобы получить результат обратно, как это:

UserSchema.statics.existsWithId = function(id, cb) { 
    this.count({ _id: id }, function(err, count) { 
     cb(err, count > 0); 
    }); 
} 

User.existsWithId("5882c3be5aad09028d4d8b46", function(err, res) { 
    console.log(res); 
}); 
+0

Работы красиво, спасибо! Один вопрос. Я до сих пор не понимаю всю концепцию «findByID» Mongoose: как бы я теперь установил «пользовательский» объект на существующий (я попробовал «user = User.findOne ({_id: id});», но это очевидно, возвращает что-то еще.) [EDIT: Я только что вспомнил, это то же самое (callbacks, arrgh)] – Maxx2709

+0

Это асинхронный, вы можете получить результат с обратным вызовом: 'User.findOne ({_id: id}, function (err, res) {console.log (res); var user = res;}); '. Если вы не укажете функцию обратного вызова, она не будет выполняться, если вы не вызываете exec(), см. Http://stackoverflow.com/questions/31549857/mongoose-what-does-the-exec-function-do –

+0

Это, по какой-то причине, будет возвращать только логическое значение, которое, как мне кажется, похоже на 'exists'. У меня может быть довольно очевидная ошибка здесь, но я не могу найти ее прямо сейчас. Вот полный код функции: http://pastebin.com/2FCXkrF4 – Maxx2709

Смежные вопросы