【问题标题】:Validation not working mongoose验证不起作用猫鼬
【发布时间】:2022-02-22 15:04:05
【问题描述】:

我正在使用 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 始终是 undefined...

编辑

我在架构中添加了一个额外的属性:

  eggs: {
    type: Number,
    min: [6, 'Too few eggs'],
    max: 12
  }

然后尝试保存eggs: 3,这产生了错误。奇怪的是,猫鼬验证似乎并不检查值是否唯一,即使在架构中设置时也是如此......

【问题讨论】:

  • 这有什么更新吗?我注意到 validateSync 不适用于一些类型验证,也不适用于自定义验证器

标签: javascript node.js mongodb mongoose


【解决方案1】:

标记。

您能否验证 mongodb 是否有您保存的模型的记录:db.organisations.find()

如果您有 undefined 值,则表明该文档已按照 validateSync() 的文档通过验证步骤:

  var err = doc.validateSync();
  if ( err ){
    handleError( err );
  } else {
    // validation passed
  }

【讨论】:

    【解决方案2】:

    对于这种类型的验证,您可以使用pathvalidate 执行此过程。

    在模式中

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

    【讨论】:

      猜你喜欢
      • 2018-11-16
      • 2014-01-16
      • 2020-12-19
      • 2017-02-24
      • 2023-03-03
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多