5

我有这样的架构:

var testSchema = new Schema({
        foo: { type: String, required: true, trim: true },
        bar: {
            fooBar: { type: String },
            barFoo: { type: String }
        }
});

而且我必须验证bar基于值的foo值,如下所示:

testSchema.path("bar").validate(function(bar){
    if(this.foo === "someValue")
        //return custom validation logic 1
    else if(this.foo === "anotherString")
        //return custom validation logic 2  
    else
        return false;
});

但是当我尝试对我的应用进行分层时,我收到以下错误:

/Users/Renato/github/local/prv/domain/models/testModel.js:34
testSchema.path("bar").validate(function(bar){
                       ^
TypeError: Cannot call method 'validate' of undefined

我在这里做错了什么?验证此对象的正确方法是什么???我用谷歌搜索了它,但我似乎找不到任何东西!甚至将我的猫鼬版本更新为~3.5.5

4

1 回答 1

6

Mongoose似乎并不认为 'bar'是 apath本身,而只是 aprefix用于 2 条单独的路径 -'bar.fooBar''bar.barFoo'

testSchema.path("bar.fooBar").validate(function(fooBar){
    if(this.foo === "someValue")
        //return custom validation logic 1
    else
        return false;
});

testSchema.path("bar.barFoo").validate(function(barFoo){
    if(this.foo === "anotherString")
        //return custom validation logic 2
    else
        return false;
});

您可能还会发现schema.pre()对集体验证模型很有用(另一个示例可以在Sub Docs文档中找到):

testSchema.pre('save', function (next) {
    if(this.foo === "someValue")
        return next(new Error('Invalid 1'));
    else if(this.foo === "anotherString")
        return next(new Error('Invalid 2'));
    else
        next();
});
于 2013-02-11T22:17:06.513 回答