javascript - Express-validator 测试项的数组独立
问题描述
我正在尝试在包含数组的对象上添加验证链;此数组包含必须根据对象的字段之一进行不同测试的对象,这是一个示例:
{
"title" : "my title",
"sections" : [
{
"type": "A",
"optionsA" : {...}
},
{
"type": "B",
"optionsB" : {...}
},
{
"type": "A",
"optionsA" : {...}
},
{
"type": "C",
"optionsC" : {...}
},
]
}
有没有办法做到这一点?我尝试使用 OneOf() 对每个部分进行特定测试,但没有成功
解决方案
虽然这个解决方案需要更多的工作,但我认为它是最直接和可维护的。
下载Validator
&Is-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);
如果有任何错误,那么它们将在错误对象中。并且是有效的将是错误的。否则,如果它是空的,那么它是有效的,你就可以开始了。我希望这会有所帮助。如果您需要更多说明,我会为您提供帮助
推荐阅读
- javascript - 使用 AJAX 预填充 Django Select 表单
- python - 如何使用 Tensorflow 估计器对保存的模型进行评分?
- python-3.x - 对象不可迭代。我怎样才能使这个代码工作
- laravel - Laravel 身份验证生命周期
- aem - AEM 在 DAM 中搜索文件
- node.js - 没有 SSH 的情况下,像“Localtunnel”这样的隧道服务如何工作?
- json - 如何将 angular.json 保存为 UTF-8?
- sql - SQL:使用 chr(10) 或 chr(13) 对列进行 LIKE 查询
- windows - 如何在 Windows 上安装primer3?
- assembly - 系统调用在 shellcode 中的使用