Javascript Express Validator 5.2.0-验证对象的通配符数组-比较

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,我如何仅

我正在尝试使用express validator验证一组对象

我一直在使用新的“通配符”和“自定义”来迭代对象数组,比较对象上的键

问题是,假设我的对象看起来像这样:

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));

我希望它能有所帮助:)

不幸的是,这个示例无法告诉您问题的确切位置。