我已经编写了一个模式,但似乎并没有像我期望的那样进行验证。我假设我的架构语法有问题,但无法弄明白。我希望在筹款活动完成之前不会看到标题或目标的错误消息,因为只有在筹款人完成后才需要这些消息。我尝试了很多种组合,但没有一种能按预期工作,这两种组合最接近我所需要的。
架构尝试一次:显示4条错误消息,3条必填错误和1条错误,说明数据应该匹配"然后"架构。
const schema = {
required: ['fundraiser'],
if: {
properties: {
fundraiser: { type: 'string' },
},
},
then: {
required: ['title', 'target'],
},
errorMessage: {
required: {
fundraiser: 'Please select an option',
title: 'Please enter a title',
target: 'Please enter a target',
},
},
};
架构尝试两次:显示2条错误消息,1条所需错误和1条错误,说明数据应该匹配"然后"架构是正确的,但是当我完成募捐活动时,有效会变为真,这时我希望看到标题和目标所需的错误。此外,没有错误包含我定义的自定义错误消息。
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-errors的自定义错误消息。任何帮助将不胜感激!谢谢!
答案 0 :(得分:1)
第一个模式的问题是“if”内的子模式是有效的,除非存在筹款人属性而不是字符串。如果您将type: 'object'
添加到根模式并将required
移到“if”子模式中,它可能会按预期工作。
第二个子模式的问题是忽略了同一个模式对象中没有“if”的第一个“then”(除非你使用ajv-keywords,实现if / then / else与它的实现方式有些不同) JSON Schema规范草案07中定义的子模式和“即使筹款人财产不存在也是有效的,而第二个”那么“只有在筹款人在场时才能通过。”