我已将 $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 的消息,但我得到了一个有效的!响应。
您可以在 https://runkit.com/jcdietrich/5d0a45ced5afb8001c33808b 查看运行示例
最佳答案
formatMinimum
不受基本 ajv 包的支持。 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));
}
关于javascript - 为什么 $data 引用在此示例中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56673217/