Я пытаюсь использовать мангуст для проверки уникальности на поле имени пользователя для модели пользователяValidate уникального имя пользователь
User.schema.path('username').validate(function(value, done) {
User.findOne({username: value}, function(err, user) {
if (err) return done(false);
if (user) return done(false);
done(true);
});
}, "exists");
Это все прекрасно работает, когда я создаю новые пользователь. Однако при обновлении данных пользователей моя проверка не выполняется. В основном, потому что я пытаюсь отредактировать одного и того же пользователя, это проверка отказа. И.Е. при обновлении пользовательского имени пользователя = bob метод проверки обнаруживает bob и терпит неудачу.
У меня есть уникальный: true на моей модели для этого поля, поэтому mongodb будет проверять его просто отлично без моей проверки мангуста.
var UserSchema = new Schema({
username: { type: String, required: true, unique: true },
password: { type: String, required: true }
);
Однако проблема с позволяя Монго сказать мне, что я не могу вставить данные есть не отличный способ извлечь осмысленное сообщение об ошибке, чтобы отправить обратно клиенту. т. е. «извините, что имя пользователя уже существует, выберите новый»
В основном единственный способ, которым я могу думать обойти это, - если мангуста передал мой валидатор реальный объект, который я пытаюсь проверить, а не просто значение. Тогда я мог бы сравнить _ID, то есть
if (current._id == new._id) //this is the same user don't fail validation on unique username
Возможный дубликат [Есть ли способ ссылаться на текущее поле модели \ _id во время проверки в мангусте?] (Http://stackoverflow.com/questions/17507522/is-there-a-way-to-refer -to-the-current-models-id-field-in-validation-in-mo) – JohnnyHK
Да, сэр, спасибо! – lostintranslation