为什么 $data 引用在此示例中不起作用?
Why isn't $data reference working in this example?
我已将 $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
并且所有这些都导致相同的有效!响应。
我期待一个无效的响应,其中包含一条关于 endDate 至少需要 startDate 的消息,但我得到了一个有效的!响应。
查看 运行 示例
相对指针中的第一个数字 JSON 指针是“要上升的级别”的数量。您可以将此视为在终端中执行 cd ..
(某种程度上 - 阅读下面链接的 RFC 以了解实际工作方式,因为确切的行为取决于您是在数组还是对象中。)
在你的情况下,你想上升一次到 endDate
,然后再上升到 properties
;一共两次。然后你“进入”startDate
,这是 forward-slash 进来的地方......
2/startDate
您可以阅读有关 JSON 指针如何在 this RFC 中工作的信息。
formatMinimum
不受基本 ajv 包的支持。 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));
}
我已将 $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
并且所有这些都导致相同的有效!响应。
我期待一个无效的响应,其中包含一条关于 endDate 至少需要 startDate 的消息,但我得到了一个有效的!响应。
查看 运行 示例相对指针中的第一个数字 JSON 指针是“要上升的级别”的数量。您可以将此视为在终端中执行 cd ..
(某种程度上 - 阅读下面链接的 RFC 以了解实际工作方式,因为确切的行为取决于您是在数组还是对象中。)
在你的情况下,你想上升一次到 endDate
,然后再上升到 properties
;一共两次。然后你“进入”startDate
,这是 forward-slash 进来的地方......
2/startDate
您可以阅读有关 JSON 指针如何在 this RFC 中工作的信息。
formatMinimum
不受基本 ajv 包的支持。 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));
}