猫鼬模式验证:验证非必需字段时出现空字符串错误

Mongoose schema validation: Error for empty string when validating a non-required field

我有一个猫鼬模式,比如,

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 字段是否为 'mobile phone number',但出现以下错误 当我将联系电话字段留空时 -

message: "Employee validation failed: contactNum: {Value} is not valid", name: "ValidationError"

但是,我不希望 contactNum 字段是 required

您需要将 validator.isMobilePhone() 更新为接受 null 或空值。 并像这样更改您的架构

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

通过将 required 设置为 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.');

我在我的 mongoose 模式中使用 npm 的 validator.js 模块进行验证,因此我检查了它的文档 here 并且通过更多的研究我终于找到了答案。

如果值为空,如 -

,可以将架构更新为不验证 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"
    }
  }