我已经将$ 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
,所有这些都导致相同的Valid!响应。
我希望收到一个有关endDate消息的无效响应,该消息需要最少的startDate,但我得到了Valid!响应。
看到正在运行的示例答案 0 :(得分:1)
formatMinimum
。必须输入ajv-keywords。
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));
}
答案 1 :(得分:0)
“相对JSON指针”中的第一个数字是“要升级的级别”的数量。您可以认为这是在终端中进行的cd ..
(某种程度上,请阅读下面的RFC链接以了解实际的工作原理,因为确切的行为取决于您是在数组内还是在对象内。)
在您的情况下,您想上升到endDate
,然后再上升到properties
;总共两次。然后您“进入” startDate
,这是正斜杠出现的地方...
2/startDate
您可以在this RFC中了解有关JSON相对指针的工作方式。