2017-02-16 31 views
0

我有兩個角色,並希望根據傳入數據中的角色字段對傳入的發佈請求應用不同的數據驗證規則。如果發佈的角色是admin,則驗證輸入是否具有名稱字段,如果角色是用戶,則驗證輸入是否具有年齡。我在beforeRemote鉤寫驗證代碼的創建這樣的方法:基於角色的驗證無法在環回中工作

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

對於第一個要求,如果角色是管理員,確認工程和漁獲如果名稱不存在輸入。但是對於下一個請求,如果角色是用戶,仍然對名稱字段發生驗證錯誤,而不是年齡。然後,如果我重新啓動節點服務器並首先嚐試使用用戶角色,則會捕獲年齡驗證,但對於所有後續請求,將會檢查年齡驗證,而不考慮角色。可能是什麼問題呢?如果還有其他方法可以實現這一點,請告訴我。提前致謝!

回答

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

實際上,保存的這兩個角色是針對移動和Web請求的。來自移動設備的請求將在請求中發送一個角色,並從Web後端請求另一個角色。 –