Я хотел проверить, что электронная почта уже находится в базе данных или нет, поэтому я использовал приведенный ниже код, который всегда дает мне ошибку, это не функция, не знаю, почему это происходит, пожалуйста, помогите мне выйти из этой проблемы:
userSchema.path('email_id').validate(function(value, done) {
this.model('User').count({ email_id: value }, function(err, count) {
if (err) {
return done(err);
}
// If `count` is greater than zero, 'invalidate'
done(!count);
});
}, 'Email already exists');
ошибка:
TypeError: done не является функцией в C: \ nodejs \ school_election_system \ Model \ user.js: 65: 9 в C: \ nodejs \ school_election_system \ node_modules \ mongoose \ lib \ model.js: 3949: 16
@NeilLunn, пожалуйста, проверьте это репо github.com/vivek9716/school_election_system, весь код есть, пожалуйста, помогите мне ...
@AluanHaddad Нет. Это не дубликат. Ключевое слово this предназначено для использования таким образом для триггеров проверки Mongoose и других методов, прикрепленных к схеме.
Для «автора» - идея «минимального» примера состоит в том, чтобы предоставить только код, необходимый для воспроизведения «внутри вашего вопроса», а не через внешние ссылки. Тем не менее, у вас фактически есть validate, определенный «дважды» для поля. У вас может быть "либо" встроенное определение ", либо" зарегистрированная функция ". Но не «оба». Но, опять же, вы действительно хотите просто использовать здесь «уникальный» или просто использовать "upserts". Любой из этих подходов не требует дополнительного асинхронного вызова, как вы пытаетесь сделать. Так работает лучше.





Если вам нужна уникальная проверка, я рекомендую использовать мангуст-уникальный-валидатор
var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
var userSchema = mongoose.Schema({
email: { type: String, index: true, unique: true, required: true },
});
userSchema.plugin(uniqueValidator);
да, я могу попробовать это, но я хочу знать, почему приведенный выше код не работает
Найдено решение:
userSchema.path('email_id').validate(function (value, respond) {
return mongoose.model('User').count({ email_id: value }).exec().then(function (count) {
return !count;
})
.catch(function (err) {
throw err;
});
}, 'Email already exists.');
Не могли бы вы в качестве примера показать "минимальный" полный список. То есть просто определение схемы и модели и попытка сделать что-то, что вызывает срабатывание проверки. Я не могу воспроизвести это, поэтому, если вы можете показать список, который действительно воспроизводит это, то стоит посмотреть. При этом простая маркировка как
"unique"действительно выполняет ту же работу и с гораздо меньшими накладными расходами.