独立快速验证器测试项的数组

问题描述

我正在尝试在包含数组的对象上添加验证链; 此数组包含必须根据对象的字段之一进行不同测试的对象, 这是一个例子:

{ 
"title" : "my title","sections" : [
  {
  "type": "A","optionsA" : {...}
  },{
  "type": "B","optionsB" : {...}
  },{
  "type": "A",{
  "type": "C","optionsC" : {...}
  },] 
} 

有没有办法做到这一点?我尝试使用 OneOf() 对每个部分进行特定测试,但没有成功

解决方法

虽然这个解决方案需要更多的工作,但我认为它是最直接和可维护的。

下载ValidatorIs-empty软件包

使用此包,您可以在很多控制下验证和 JSON 对象。所以我像这样使用它来验证我的 req.body

const Validator = require('validator');
const isEmpty = require('is-empty');

module.exports = function validateRegiterInput(data) {
    let errors = {};

    //Convert empty fields to a empty string so we can use validator functions
    data.firstName = !isEmpty(data.firstName) ? data.firstName : "";
    data.lastName = !isEmpty(data.lastName) ? data.lastName : "";
    data.email = !isEmpty(data.email) ? data.email : "";
    data.password = !isEmpty(data.password) ? data.password : "";

    //school,schoolname? tbd


    //Name check 
    if (Validator.isEmpty(data.firstName)) {
        errors.firstName = "First name is required!"
    }
    if (Validator.isEmpty(data.lastName)) {
        errors.lastName = "Last name is required!"
    }

    //Email check 
    if (Validator.isEmpty(data.email)) {
        errors.email = "Email field is required!";
    } else if (!Validator.isEmail(data.email)) {
        errors.email = "Email is invalid!";
    }

    //Password check 
    if (Validator.isEmpty(data.password)) {
        errors.password = "Password field is required!";
    }
    if (!Validator.isLength(data.password,{ min: 6,max: 30 })) {
        errors.password = "Password must be at least 6 characters!";
    }


    return {
        errors,isValid: isEmpty(errors)
    };
};

所以发生的情况是,我用我的数据调用这个函数,并且我能够仅使用点表示法嵌套到数组或对象中。

在主文件中,我有这个

  const { errors,isValid } = validateRegisterInput(req.body);

如果有任何错误,那么它们将在错误对象中。并且有效将是假的。否则,如果它是空的,则有效是真的,你很高兴。我希望这有帮助。如果您需要更多说明,我会随时为您提供帮助