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