[英]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.