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

时间:2019-01-17 17:22:36

标签: node.js mongodb mongoose validator.js

我有一个猫鼬的模式,

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:{Value}不是   有效”,名称:“ ValidationError”

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

2 个答案:

答案 0 :(得分:0)

您需要将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.');

答案 1 :(得分:0)

我在猫鼬模式中使用npm的validatorator.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"
    }
  }