2016-11-30 1 views
0

My APIはusers JSONとしてPOSTします。特定のフィールドがJSONオブジェクトの一部として含まれている場合にのみ、そのフィールドを検証したいと思います。.pre saveを使用してユーザーを検証する

例えば、ユーザーは次のようになります。

{ 
    "email" : "[email protected]", 
    "username" : "testing", 
    "name" : "Test User" 
} 

か、名前フィールドがない場合があります。

{ 
    "email" : "[email protected]", 
    "username" : "testing" 
} 

を、私はnameは少なくとも6つの文字を持っていることを確認したいと思いますそれが含まれているフィールドの場合。

私はモデルに.preを使用して検証プロセスを構築しようとしていますが、予想通りのものではありません。

var UserSchema = new Schema({ 
    id      : String, 
    name     : String, 
    email     : String, 
    username    : String 
},{ timestamps: { createdAt: 'created_at',updatedAt: 'updated_at' } }); 

UserSchema.pre('save', function(next) { 
    console.log(this); //no evidence of name property here 

    if("name" in this){ 
    console.log("Name found"); //this is always the output 
    } else { 
    console.log("Name not found"); 
    } 
    next(); 
}); 

上記のコードはテスト用です。上記のいずれかのJSONオブジェクトを使用すると、コンソールに出力するときにオブジェクトにnameプロパティがないのに、出力は常に「名前が見つかりました」です。これはモデルにnameのプロパティがあるためですか?

+0

'UserSchema'を書き留めますか? '//ここに名前プロパティの証拠がないのはどういう意味ですか、既にログに記録されているのは何ですか? –

+0

これを今追加しました – tommyd456

+0

JSONを 'name'なしで使用すると、端末のユーザオブジェクトを見ると' name'のプロパティはありません。問題は、この ''の名前はまだ存在するということですか? – tommyd456

答えて

0

投稿されたjsonに名前欄がない場合があるので、nameのプロパティが存在しない場合は、ロジック/条件を実行する可能性があるため、ユーザーオブジェクトは端末にあり、nameのプロパティはありません:

UserSchema.pre('save', function(next) { 
    if (this.name !== undefined) { 
    if (this.name.length <= 6) { 
     // throw error or whatever 
    } 
    } 
    next(); 
}); 
+0

しかし、なぜ 'name'プロパティは常に存在しますか?それは本当に私の質問です – tommyd456

+0

あなたの質問への答えはYESです。モデルには 'name'プロパティがあるので、キーが存在しているかどうかをチェックする必要はありません。そうでなければ 'undefined'を返し、それは理にかなっています。 –

+0

したがって、ユーザーの空の値とプロパティとして含まれていない値を区別するにはどうすればよいですか? 'if(this.name)'が – tommyd456

関連する問題