ItsEvilTime
@ItsEvilTime
Сайленсер не дает мне покоя

Как получить поле, в котором произошла ошибка валидации?

Есть некоторая схема и к ней подключен плагин:
let schema = new Schema({
  title: {
    type: String
  },
  url: {
    type: String
  }
});

schema.plugin(errorHandler);


сам плагин errorHandler:
module.exports = exports = function errorHandler (schema, options) {

  schema.post('save', function (err, doc, next) {

    // обработка ошибки
    // ...

    next(err);
  });

}


Я получаю в плагин ошибки, но так как не знаю из какого они именно поля, то описываю их туманно, в стиле "Ошибка валидации". Хотелось чтобы было "Ошибка валидации поля title".

Вопрос: как получить название поля, в котором произошла ошибка?
  • Вопрос задан
  • 185 просмотров
Пригласить эксперта
Ответы на вопрос 1
zoonman
@zoonman
⋆⋆⋆⋆⋆
Валидация ошибок в постхуке не очень хорошая практика.
Посмотрите тут mongoosejs.com/docs/validation.html

var breakfastSchema = new Schema({
      eggs: {
        type: Number,
        min: [6, 'Too few eggs'],
        max: 12
      },
      bacon: {
        type: Number,
        required: [true, 'Why no bacon?'] // здесь мы устанавливаем нужное сообщение
      },
      drink: {
        type: String,
        enum: ['Coffee', 'Tea'],
        required: function() {
          return this.bacon > 3;
        }
      }
    });
    var Breakfast = db.model('Breakfast', breakfastSchema);

    var badBreakfast = new Breakfast({
      eggs: 2,
      bacon: 0,
      drink: 'Milk'
    });
    var error = badBreakfast.validateSync(); // а теперь проверим перед тем, как сохранить
    console.log(error); // дампнем ошибку


Правильнее проверять поля до момента вызова сохранения данных. Например вы можете втихую через аякс отправлять данные формы и проверять их на валидность подсвечивая элементы на форме.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы