繁体   English   中英

在 mongoose 中添加多个验证

[英]Add more than one validate in mongoose

我有这个架构:

var userSchema = new mongoose.Schema({
    name: {type: String,required: true,lowercase: true, trim: true},
    email: {type: String, required : true, validate: validateEmail },
    createdOn: { type: Date, default: Date.now },
    lastLogin: { type: Date, default: Date.now }
});

这是我的验证“规则”

var isNotTooShort = function(string) {
    return string && string.length >= 5;
};

var onlyLettersAllow = function(string) {
    var myRegxp = /^[a-zA-Z]+$/i;
    return  myRegxp.test(string);
};

为了验证我的姓名字段,我尝试了这个:

userSchema.path('name').validate(isNotTooShort, 'Is too short');
userSchema.path('name').validate(onlyLettersAllow, 'Only Letters');

它有效。 我可以在 Schema 中的字段上添加多个验证吗? 就像是:

validate:[onlyLettersAllow,isNotTooShort]

您可以添加多个验证,如下所示:

var manyValidators = [
    { validator: isNotTooShort, msg: 'Is too short' },
    { validator: onlyLettersAllow, msg: 'Only Letters' }
];

var userSchema = new Schema({ 
    name: { type: String, validate: manyValidators },
    email: {type: String, required : true, validate: validateEmail },
    createdOn: { type: Date, default: Date.now },
    lastLogin: { type: Date, default: Date.now }
});

回答:

var isNotTooShort = function(string) {
  return string && string.length >= 5;
};

var onlyLettersAllow = function(string) {
  var myRegxp = /^[a-zA-Z]+$/i;
  return  myRegxp.test(string);
};

var manyValidators = [
    { validator: isNotTooShort, msg: 'Is too short' },
    { validator: onlyLettersAllow, msg: 'Only Letters' }
];

var userSchema = new Schema({ 
    name: { type: String, validate: manyValidators },
    email: {type: String, required : true, validate: validateEmail },
    createdOn: { type: Date, default: Date.now },
    lastLogin: { type: Date, default: Date.now }
});

另一个示例:您可以在 mongoose 类似tags中添加多个验证,并使用 mongoose 默认验证,如name

const Course = mongoose.model('Course', mongoose.Schema({
  name: {
    minLength: 5,
    maxLength: 50,
    type: String,
    required: true,
  },
  tags: {
    type: Array,
    required: true,
    validate: [
      {
        validator: function (v) {
            return v && v.length > 0
          },
          message: 'tags is required ...'
        },
        {
          validator: function (v) {
            return v && v.length < 2
          },
          message: 'tags are too much ...'
      }
    ]
  },
  date: { 
    type: Date,
    default: Date.now
  }
}))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM