2017-02-16 6 views
0

私は2つの役割を持ち、着信データのロールフィールドに基づいて受信ポスト要求に異なるデータ検証規則を適用したいとします。投稿されたロールが管理者の場合は、入力に名前フィールドがあるかどうかを検証し、ロールがユーザーの場合は、入力に年齢があるかどうかを検証します。名前が入力に存在しない場合の役割は、管理、検証作品やキャッチされた場合、最初の要求のためにロールベースの検証がループバックで機能していない

if (role === "admin") { 
     Members.validatesPresenceOf('name'); 
     next(); 
} else { 
     Members.validatesPresenceOf('age'); 
     next(); 
} 

:私のようなメソッドを作成するのbeforeRemoteフックで検証コードを書きました。しかし、roleがuserの次の要求に対しては、nameフィールドではまだ有効ではありません。その後、ノードサーバーを再起動して最初にユーザーの役割を試してみると、年齢の検証が行われますが、その後のすべての要求に対して、年齢の検証は役割に関係なくチェックされます。何が問題なの?これを達成するための他の方法があれば、教えてください。前もって感謝します!

答えて

3

モデルの検証は永続的です。この方法は機能しません。カスタムバリデータを作成する必要があり

:要求がサインアップ要求であるので

Members.validateAsync('name', function(err, done){ 
    var role = getRole(); 
    if(role === 'admin'){ 
    if(!this.name) err(); 
    } 
    done(); 
}, {message: 'name should be filled'}); 

Members.validateAsync('age', function(err, done){ 
    var role = getRole(); 
    if(role !== 'admin'){ 
    if(!this.age) err(); 
    } 
    done(); 
}, {message: 'age should be filled'}); 
+0

は、入力要求における役割フィールドがvalidateAsync関数内から管理者またはユーザーが含まれているかどうかを確認することも可能でしょうか? –

+0

@DevStar申し込み段階では、ユーザーはいません!おそらくあなたはフォームデータ内のサーバーへのユーザー送信のサインアップの役割を送っているかもしれません –

+0

実際には、2つの役割はモバイルとWebリクエスト用に保存されています。モバイルからのリクエストには、リクエストで送信される1つのロールと、Webバックエンドからのリクエストに対する別のロールがあります。 –