【问题标题】:Performing dynamic request validation执行动态请求验证
【发布时间】:2017-02-18 19:23:18
【问题描述】:

我有一个像这样来自 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"
    }
  ]

我很确定我的验证方法缺少一些东西,我只是不太确定它是什么。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript node.js mongodb validation


    【解决方案1】:

    想通了

    '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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 2015-09-20
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多