Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证不起作用猫鼬_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 验证不起作用猫鼬

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

我正在使用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, '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);