В последнее время я работаю над системой аутентификации, которая должна либо создать нового пользователя, если не существует пользователя с данным 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, я не совсем профессионально в этом.
Если кому-либо из вас нужен дополнительный код для ответа на вопрос, не стесняйтесь спрашивать меня, и я сделаю это. Кроме того, я не могу + респ ответы, но я всегда ценю им, :)
Работы красиво, спасибо! Один вопрос. Я до сих пор не понимаю всю концепцию «findByID» Mongoose: как бы я теперь установил «пользовательский» объект на существующий (я попробовал «user = User.findOne ({_id: id});», но это очевидно, возвращает что-то еще.) [EDIT: Я только что вспомнил, это то же самое (callbacks, arrgh)] – Maxx2709
Это асинхронный, вы можете получить результат с обратным вызовом: '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 –
Это, по какой-то причине, будет возвращать только логическое значение, которое, как мне кажется, похоже на 'exists'. У меня может быть довольно очевидная ошибка здесь, но я не могу найти ее прямо сейчас. Вот полный код функции: http://pastebin.com/2FCXkrF4 – Maxx2709