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

マングースはそれ自体であるとは考えていないよう ですが、2つの別々のパスのためのものです-そして:'bar'pathprefix'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()モデルをまとめて検証するのにも役立つ場合があります(別の例はサブドキュメントのドキュメントにあります)。

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 に答える