簡體   English   中英

貓鼬模式驗證:驗證非必填字段時出現空字符串錯誤

[英]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字段驗證為“手機號碼”,但是當我將聯系人號碼字段留空時出現以下錯誤-

消息:“員工驗證失敗:contactNum:{Value}無效”,名稱:“ ValidationError”

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

您需要將您的validateator.isMobilePhone()更新為接受空值或空值。 然后像這樣更改您的架構

 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.');

我在貓鼬模式中使用npm的validatorator.js模塊進行驗證,因此我在這里查看了它的文檔並通過進一步的研究終於找到了答案。

如果值為空,則可以更新該架構以不驗證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"
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM