Javascript Ajv关键字和自定义错误消息

Javascript Ajv关键字和自定义错误消息,javascript,ajv,Javascript,Ajv,我已经写了一个模式,但它似乎不像我期望的那样进行验证。我假设我的模式语法有问题,但无法解决。我希望在筹款活动完成之前不会看到标题或目标的错误消息,因为只有在筹款活动完成时才需要它们。我尝试了很多组合,但没有一个能像预期的那样工作,这两个组合是我最接近我所需要的 模式尝试一:显示4条错误消息、3条必需错误和1条错误,说明数据应与“then”模式匹配 模式尝试两次:显示两条错误消息,一条是必需错误,一条是错误说明数据应与“then”模式匹配,这是正确的,但当我完成筹款时,valid变为true,这是

我已经写了一个模式,但它似乎不像我期望的那样进行验证。我假设我的模式语法有问题,但无法解决。我希望在筹款活动完成之前不会看到标题或目标的错误消息,因为只有在筹款活动完成时才需要它们。我尝试了很多组合,但没有一个能像预期的那样工作,这两个组合是我最接近我所需要的

模式尝试一:显示4条错误消息、3条必需错误和1条错误,说明数据应与“then”模式匹配

模式尝试两次:显示两条错误消息,一条是必需错误,一条是错误说明数据应与“then”模式匹配,这是正确的,但当我完成筹款时,valid变为true,这是我希望看到标题和目标的必需错误的时候。此外,没有错误包含我定义的自定义错误消息

const scema = {
  if: {
    properties: { fundraiser: { minLength: 2 } },
    then: { required: ['title', 'target'] },
  },
  then: { required: ['fundraiser'] },
  errorMessage: {
    required: {
      fundraiser: 'Please select an option',
      title: 'Please enter a title',
      target: 'Please enter a target',
    },
  },
};

我很确定我的模式有问题,但文档中不清楚如何将if/then与使用ajv错误的自定义错误消息结合使用。任何帮助都将不胜感激!谢谢

第一个模式的问题是,“if”中的子模式有效,除非存在fundraiser属性而不是字符串。如果您将
type:'object'
添加到根模式,并将
required
移动到“if”子模式中,它可能会像您预期的那样工作

第二个子模式的问题是,在同一个模式对象中没有“if”的第一个“then”被忽略(除非您使用的ajv关键字实现了if/then/else,与JSON模式规范草案-07中的定义有所不同),并且子模式中的子模式被忽略即使筹款人属性不存在,“如果”也有效,第二个“那么”只有在筹款人在场时才能通过

const scema = {
  if: {
    properties: { fundraiser: { minLength: 2 } },
    then: { required: ['title', 'target'] },
  },
  then: { required: ['fundraiser'] },
  errorMessage: {
    required: {
      fundraiser: 'Please select an option',
      title: 'Please enter a title',
      target: 'Please enter a target',
    },
  },
};