javascript - 为什么 $data 引用在此示例中不起作用?

标签 javascript ajv

我已将 $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/

相关文章:

javascript - 当 javascript 中的字段值不正确时取消下一个事件

javascript - 比较来自 PostgreSQL 的 javascript 日期时间和时间戳

javascript - AJV 多级/嵌套 JSON 模式验证

node.js - AJV:检查一个属性是否等于另一个属性

json - 基于数据的 ajv 条件模式验证

Javascript 输出错误

javascript - Node JS中区分模块/实例/方法变量的命名约定

javascript - 在同一文档中引用 $id 时,如何修复 "Can' t resolve reference"错误?

javascript - fastify 和 ajv 模式验证

Javascript 在 Chrome 中工作,但在 IE 中不起作用