Javascript Express Validator 5.2.0-验证对象的通配符数组-比较
我正在尝试使用express validator验证一组对象 我一直在使用新的“通配符”和“自定义”来迭代对象数组,比较对象上的键 问题是,假设我的对象看起来像这样:Javascript Express Validator 5.2.0-验证对象的通配符数组-比较,javascript,arrays,express,express-validator,Javascript,Arrays,Express,Express Validator,我正在尝试使用express validator验证一组对象 我一直在使用新的“通配符”和“自定义”来迭代对象数组,比较对象上的键 问题是,假设我的对象看起来像这样: flavors:[ { name: '', percentage: '0', ratio: '0' }, { name: 'Strawberry', percentage: '2', ratio: '0' }, { name: '', percentage: '3', ratio: '0' } ] 如果百分比>0,我如何仅
flavors:[
{ name: '', percentage: '0', ratio: '0' },
{ name: 'Strawberry', percentage: '2', ratio: '0' },
{ name: '', percentage: '3', ratio: '0' }
]
如果百分比>0,我如何仅检查“名称”是否存在
req.checkBody("flavors","Your recipe has no flavor!").notEmpty();
req.checkBody("flavors.*","Please enter a name for this flavor.").custom(function (value) {
return (!(value.percentage > 0) && !value.name);
});
这是可行的,但“错误”输出类似于:
{ 'flavors[2]': {
location: 'body',
param: 'flavors[2]',
msg: 'Please enter a name for this flavor.',
value: { name: '', percentage: '3', ratio: '0' }
}}
这使得在我的EJS模板中显示时很困难
如何使用添加的键使输出看起来像这样
{ 'flavors[2].name': {
location: 'body',
param: 'flavors[2].name',
msg: 'Please enter a name for this flavor.',
value: { name: '', percentage: '3', ratio: '0' }
}}
希望有人能帮我,谢谢!:-) 目前本机不支持此功能,但在实现后可能部分可用 目前,在lodash's的帮助下,您可以实现以下目标:
req.checkBody('flavors.*.name').custom((name, { req, location, path }) => {
const index = _.toPath(path)[1];
const { percentage } = req[location].flavors[index];
// If percentage is 0, then it's always valid.
return percentage > 0 ? name !== '' : true;
});
目前,也可以通过这种方式来完成
req
.checkBody("flavors","Please enter a name for this flavor.")
.custom(data =>
Array.isArray(data)
&&
data.length
&&
data.every(item => item.name && item.percentage > 0));
我希望它能有所帮助:)不幸的是,这个示例无法告诉您问题的确切位置。