Я пытаюсь использовать встроенный валидатор совпадений в мангусте, но он показывает мне следующую ошибку:

(node:4456) UnhandledPromiseRejectionWarning: ValidationError: data validation failed: phone: Path `phone` is invalid (12345678910).

Это моя схема:

const schema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    message: "Name is required",
  },
  isGold: {
    type: Boolean,
    default: false,
  },
  phone: {
    type: String,
    match: /^d{11}$/g,
    required: true,
  },
});

Я проверил регулярное выражение онлайн (на веб-сайте regex101), и он там работает нормально, но здесь он дает мне ошибку. Понятия не имею, что вызывает эту проблему. Пожалуйста помоги.

0
Zain Abedin 14 Июн 2020 в 19:44

1 ответ

Лучший ответ

Вы уверены, что протестировали именно это регулярное выражение? Прямо сейчас ваше регулярное выражение говорит «начало строки», «ровно 11 экземпляров буквы d», «конец строки».

Таким образом, будет соответствовать только строка ddddddddddd.

Может быть, вы хотели сопоставить 11 чисел ? Значит, в \d отсутствует обратная косая черта!

Фиксированное регулярное выражение выглядит так:

/^\d{11}$/

(Обратите внимание, что модификатор g здесь лишний.)

Примечание: тот факт, что вы получаете UnhandledPromiseRejectionWarning, указывает на то, что вы неправильно обрабатываете свои ошибки. Возможно, у вас есть асинхронный код, который вы не используете await (или, если вы не используете async / await: вы забыли вызвать .catch()). Этого не должно происходить, и в будущих версиях node.js это, вероятно, просто приведет к сбою вашего процесса, потому что тихие ошибки никогда не бывают хорошими, лучше всего быстро выйти из строя. Итак, вам следует выяснить, где вы забыли обработать отклонение обещания, и исправить это.

1
CherryDT 14 Июн 2020 в 16:53