2014-12-09 44 views
0

我想建立使用express-validator使Node.js應用程序,這將讓我驗證請求參數在身體像這樣 -調用對象的方法,該方法的名字只有字符串

req.checkBody('email_id', 'Invalid email ID!').notEmpty().isEmail(); 

現在我我試圖構建一個大的JSON配置文件,該文件將包含應用程序中每個路由的所有字段及其規則(例如函數名稱,例如isEmail())。我想寫一個攔截每個請求的中間件,找到路由,從JSON文件中選擇字段和驗證規則,然後運行這些規則。該配置文件應該是這樣的 -

{ 
    "VALIDATION_RULES": { 
     "/createUser": { 
      "RULES": { 
       "email_id": { 
        "message": "Invalid email ID!", 
        "rules": ["notEmpty","isEmail"] 
       } 
      } 
     } 
    } 
} 

我可以看看快遞驗證器模塊的出口得到所有可用的驗證功能名稱。如果他們是獨立的函數調用,我會看到如何使用它的名稱字符串調用該函數,如herehere所示。

如何挑選規則(notEmptyisEmail),這些規則是JSON中的字符串,將它們轉換爲函數並鏈接到req.checkBody($field, $field.message)

回答

2

您可以使用數組表示法來調用函數。

這應該工作

req.checkBody($field, $field.message)["notEmpty"]()

req.checkBody($field, $field.message)["notEmpty"].apply()

req.checkBody($field, $field.message)["notEmpty"].call()

2

只是參考使用V功能易於使用的方法名稱:

var fields = { 
    "email_id": { 
    "message": "Invalid email ID!", 
    "rules": ["notEmpty","isEmail"] 
    } 
}; 

// ... 

var keys = Object.keys(fields); 
for (var i = 0, len = keys.length, field, rules; i < len; ++i) { 
    field = fields[keys[i]]; 
    rules = field.rules; 
    var checker = req.checkBody(keys[i], field.message); 
    for (var f = 0, lenf = rules.length; f < lenf; ++f) 
    checker[rules[f]](); 
} 
相關問題