2013-07-10 2 views
0

Я пытаюсь использовать мангуст для проверки уникальности на поле имени пользователя для модели пользователя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 
+0

Возможный дубликат [Есть ли способ ссылаться на текущее поле модели \ _id во время проверки в мангусте?] (Http://stackoverflow.com/questions/17507522/is-there-a-way-to-refer -to-the-current-models-id-field-in-validation-in-mo) – JohnnyHK

+0

Да, сэр, спасибо! – lostintranslation

ответ

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