猫鼬匹配验证器给出验证错误,即使字符串匹配

mongoose match validator giving validation error even though the string matches

我正在尝试在 mongoose 中使用内置匹配验证器,但它向我显示以下错误:

(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 网站上),它在那里工作正常,但在这里它给了我错误。我不知道是什么导致了这个问题。请帮忙。

您确定您测试了那个正则表达式吗?现在您的正则表达式显示 "start of string"、"exactly 11 instances of the letter d"、"end of string".

因此,只有字符串 ddddddddddd 会匹配。

也许您想匹配 11 个 数字?那么你在 \d!

中缺少反斜杠

固定的正则表达式如下所示:

/^\d{11}$/

(注意这里的g修饰符是多余的。)

旁注:您得到 UnhandledPromiseRejectionWarning 的事实表明您没有正确处理错误。可能您有一些您没有 awaiting 的异步代码(或者如果您不使用 async/await:您忘记调用 .catch())。这不应该发生,在 node.js 的未来版本中,它可能只会让您的进程崩溃,因为静默错误从来都不是一件好事,最好快速失败。所以,你应该弄清楚你在哪里忘记处理承诺拒绝并修复它。