我已经将$data选项设置为true,并尝试使用$data表达式将endDate限制为至少等于startDate的值。此示例应该无法通过验证,但它没有。:(
var Ajv = require('ajv');
var ajv = new Ajv({allErrors: true, $data: true});
var schema = {
"properties": {
"filter": { "properties": {
"startDate": { type: 'string', format:'date'},
"endDate": { type: 'string', format:'date', formatMinimum: {'$data': '/filter/startDate'}}
}}
}};
var validate = ajv.compile(schema);
test({filter: {startDate:'2008-09-01', endDate: '2004-09-01'}});
function test(data) {
var valid = validate(data);
if (valid) console.log('Valid!');
else console.log('Invalid: ' + ajv.errorsText(validate.errors));
}我尝试过各种JSON指针。0/startDate 1/startDate和显示的/filter/startDate,它们都会产生相同的有效结果!回应。
我希望得到一个无效的响应,其中包含一条关于需要最少startDate的endDate的消息,但我得到的是一个有效的!回应。
您可以在https://runkit.com/jcdietrich/5d0a45ced5afb8001c33808b上看到一个正在运行的示例
发布于 2019-06-24 22:14:07
基本的ajv包不支持formatMinimum。ajv-关键字是必需的。
var Ajv = require('ajv');
var ajv = new Ajv({allErrors: true, $data: true});
require("ajv-keywords")(ajv)
var schema = {
"properties": {
"filter": { "properties": {
"startDate": { type: 'string', format:'date'},
"endDate": { type: 'string', format:'date', formatMinimum: {'$data': '/filter/startDate'}}
}}
}};
var validate = ajv.compile(schema);
test({filter: {startDate:'2008-09-01', endDate: '2004-09-01'}});
function test(data) {
var valid = validate(data);
if (valid) console.log('Valid!');
else console.log('Invalid: ' + ajv.errorsText(validate.errors));
}发布于 2019-06-20 01:52:49
相对JSON指针中的第一个数字是“要上升的级别”的数量。您可以将此视为在终端中执行cd .. (某种程度上,请阅读下面的RFC链接了解实际工作原理,因为确切的行为取决于您是在数组中还是在对象中)。
在本例中,您希望向上访问一次endDate,然后再向上访问一次properties;总共两次。然后你“进入”startDate,这就是正斜杠的用法...
2/startDate您可以阅读有关相对JSON指针在this RFC中的工作原理。
https://stackoverflow.com/questions/56673217
复制相似问题