在特定条件下不要对模式运行验证

时间:2016-03-18 03:59:04

标签: node.js mongoose mongoose-schema

我有一个包含几个必填字段的模式。当我使用published:false道具保存文档时,我想运行任何验证,只是按原样保存文档。稍后,当published:true时,我想运行所有验证。

我认为这样可行:

MySchema.pre('validate', function(next) {
    if(this._doc.published === false) {
        //don't run validation
        next();
    }
    else {
        this.validate(next);
    }
});

但这不起作用,它会在必需的属性上返回验证错误。

那么如何在某些情况下不运行验证并在其他情况下运行验证呢?最优雅的方法是什么?

1 个答案:

答案 0 :(得分:0)

请尝试这个,

TagSchema.pre('validate', function(next) {
    if (!this.published)
        next();
    else {
        var error = new mongoose.Error.ValidationError(this);
        next(error);
    }
});

测试架构

var TagSchema = new mongoose.Schema({
    name: {type: String, require: true},
    published: Boolean,
    tags: [String]
});

publishedtrue

var t = new Tag({
    published: true,
    tags: ['t1']
});

t.save(function(err) {
    if (err)
        console.log(err);
    else
        console.log('save tag successfully...');
});

结果:

{ [ValidationError: Tag validation failed]
  message: 'Tag validation failed',
  name: 'ValidationError',
  errors: {} }

publishedfalse,结果为

save tag successfully...