Javascript 验证不起作用猫鼬
我正在使用Monggose 4.8.1。我有一个简单的模式:Javascript 验证不起作用猫鼬,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在使用Monggose 4.8.1。我有一个简单的模式: var mongoose = require('mongoose'); var Schema = mongoose.Schema; var Organisation = new mongoose.Schema({ name: { type: String, required: [true, 'Organisation name must be provided'], unique: [true, 'Org
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Organisation = new mongoose.Schema({
name: {
type: String,
required: [true, 'Organisation name must be provided'],
unique: [true, 'Organisation name must be unique']
},
createdBy: {
type: String,
ref: 'User'
},
createdOn: {
type: Date,
"default": Date.now
},
availableUntil: {
type: Date
}
});
mongoose.model('Organisation', Organisation);
我已经保存了电子邮件email@domain.com在文件中
现在我想再次尝试保存它,并首先使用validateAsync
检查它是否有效。因此,我希望得到一个错误,因为电子邮件不是唯一的
var organisation = new Organisation({
name: 'email@domain.com'
});
var validResult = organisation.validateSync();
console.log('validResult is ', validResult);
但是validResult总是未定义的
编辑
我在架构中添加了一个额外属性:
eggs: {
type: Number,
min: [6, 'Too few eggs'],
max: 12
}
然后试图保存鸡蛋:3
,这产生了一个错误。奇怪的是,mongoose验证似乎没有检查值是否唯一,即使在模式中设置了…标记
您能否验证mongodb是否有您保存的模型的记录:db.organizations.find()
如果您有undefined
值,则表示文档已通过验证步骤,方法是按照validateSync()的文档进行操作:
对于这种类型的验证,您可以使用path
和validate
遵循此过程
在模式中
var OrganisationSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'Organisation name must be provided']
}
//....
});
OrganisationSchema.path('name').validate(function(value, done){
var self = this;
if(!self.isNew){
return done(true);
}else{
//mongoose.models['Organisation'] or self.model('Organisation')
mongoose.models['Organisation'].count({name: value}, function(err, count){
if(err){
return done(err);
}
return done(!count)
});
}
}, "This email already exists" );
mongoose.model('Organisation', OrganisationSchema);
有什么最新消息吗?我注意到validateSync不适用于少数类型验证,也不适用于自定义验证程序
var OrganisationSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'Organisation name must be provided']
}
//....
});
OrganisationSchema.path('name').validate(function(value, done){
var self = this;
if(!self.isNew){
return done(true);
}else{
//mongoose.models['Organisation'] or self.model('Organisation')
mongoose.models['Organisation'].count({name: value}, function(err, count){
if(err){
return done(err);
}
return done(!count)
});
}
}, "This email already exists" );
mongoose.model('Organisation', OrganisationSchema);