2017-02-18 57 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; 
    } 
}