Проверка схемы Mongoose: ошибка для пустой строки при проверке необязательного поля - PullRequest
0 голосов
/ 17 января 2019

У меня есть схема мангуста, вроде,

let Employee = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true,
    trim: true,
    unique: true,
    validate: {
      validator: validator.isEmail,
      message: "{Value} is not valid"
    }
  },
  contactNum: {
    type: String,
    validate: {
      validator: validator.isMobilePhone,
      message: "{Value} is not valid"
    }
  },
  salary: {
    type: String
  }
});

Я проверяю, чтобы поле contactNum было «номером мобильного телефона», но возникает следующая ошибка , когда я оставил поле номера контакта пустым -

сообщение: «Проверка работника не удалась: contactNum: {Значение} не действительный ", имя:" ValidationError "

Однако я не хочу, чтобы поле contactNum было required.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Я использую модуль validator.js для npm для проверки в моей схеме mongoose, и поэтому я проверил его документацию здесь и, проведя еще несколько исследований, я наконец нашел ответ.

Схему можно обновить, чтобы она не проверялась для mobile phone number, если значение пустое, например -

contactNum: {
    type: String,
    required: false,
    validate: {
      validator: (value) => {

        // Check if value is empty then return true.
        if (value === "") {
          return true;
        }

        // If value is empty will not validate for mobile phone.
        return validator.isMobilePhone(value);
      },
      message: "{VALUE} is not valid"
    }
  }
0 голосов
/ 17 января 2019

вам нужно обновить свой validator.isMobilePhone (), чтобы он принимал нулевые или пустые значения. И измени свою схему следующим образом

 contactNum: {
    type: String,
    required:false,
    validate: {
      validator: validator.isMobilePhone,
      message: "{Value} is not valid"
    }
  }

, установив значение false, вы можете достичь желаемого.

смените функцию валидатора js следующим образом

Validator.isMobilePhone('telephone', function(value, requirement, attribute) { // requirement parameter defaults to null
  if(value.toString()==""){return true;}
  return value.match(/^\d{3}-\d{3}-\d{4}$/);
}, 'The :attribute phone number is not in the format XXX-XXX-XXXX.');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...