2017-02-18 55 views
0

我已經從mongodb的這樣執行動態請求驗證

{ 
    "_id": "588c5c0d709d11e2aa0da250", 
    "fields": [ 
    { 
     "type": "text", 
     "required": true, 
     "placeholder": "Food name", 
     "name": "name", 
     "label": "Name", 
     "order": 1 
    }, 
    { 
     "type": "number", 
     "required": true, 
     "placeholder": "Item price", 
     "name": "price", 
     "label": "Price", 
     "order": 2 
    } 
    ] 
} 

這基本上代表了形式的對象,我使用的字段陣列,以產生在前端的格式,並也做驗證的前端,但是上午努力驗證提交的數據服務器端。 請求看起來像這樣

{ 
    "data": [ 
     { 
      "name": "price", 
      "value": 17000 
     } 
    ] 
} 
基於在對象定義的表單字段

,名字字段缺失。我已經驗證功能設置

validate: (req, fields) => { 
     var errors = []; 
     if(!req.data) { 
      errors.push({field: 'data', message: 'data field is required'}) 
     } 
     else { 
      _.each(fields, (f) => { 
       if(f.required) { 
        _.each(req.data, (d) => { 
         if(typeof d[f.name] == "undefined") { 
          errors.push({field: f.name, message: "field is required" }) 
         } 
        }) 
       } 
      }) 
     } 

     return errors; 
    } 

但是我的方法返回字段的錯誤消息是存在於該請求。

[ 
    { 
     "field": "price", 
     "message": "field is required" 
    } 
    ] 

我很確定我的驗證方法是缺少的東西,我只是不太確定它是什麼。任何幫助將不勝感激。

回答

0

想通了

'use strict'; 

const _ = require('lodash'); 

let getRequiredFields = (fields) => { 
    return fields 
     .filter((f) => { return f.required == true }) 
     .map((f) => { 
      return f.name; 
     }) 
} 

module.exports = { 
    validate: (req, fields) => { 
     let errors = []; 
     if(!req.data) { 
      errors.push({field: 'data', message: 'data field is required'}) 
     } 
     else { 
      let requiredFields = getRequiredFields(fields); 
      _.each(requiredFields, (f) => { 
       if(!req.data.hasOwnProperty(f)) { 
        errors.push({ 
         field: f, 
         message: 'field is required' 
        }) 
       } 
      }) 
     } 

     return errors; 
    } 
}