gpt4 book ai didi

javascript - 如何设置自定义 AJV 关键字?

转载 作者:行者123 更新时间:2023-12-05 04:32:21 28 4
gpt4 key购买 nike

我正在使用 ajv并希望添加一个自定义验证器来检查给定的对象。此自定义验证器应返回 true 或失败并显示正确的错误消息。基于

我从以下示例代码开始

const Ajv = require("ajv");
const ajv = new Ajv({ allErrors: true });

ajv.addKeyword({
keyword: "eachPropIsTrue",
type: "object",
schemaType: "boolean",
code(context) {
const { data } = context;
const eachPropIsTrue = Object.values(data).every(value => !!value);

context.fail(!eachPropIsTrue);
},
})

const schema = {
type: "object",
eachPropIsTrue: true,
properties: {
a: { type: "boolean" }
},
required: [ "a" ],
additionalProperties: false
};

const validate = ajv.compile(schema);
console.log(validate({ a: true })); // true
console.log(validate({ a: false })); // true but should be false!
console.log(validate({ })); // false

不幸的是,我面临两个问题:

  • 第二次验证没有失败,尽管我预计它会失败
  • 我必须在哪里传递有关构造的错误消息的信息?

code 函数中检查 data 变量时,我可以看到它不包含当前对象。那么设置自定义关键字的正确方法是什么?

我正在寻找类似的示例函数

validate(theObject): boolean | string => {
const anyPropIsFalse = Object.values(data).some(value => value === false);

if(anyPropIsFalse) {
return 'Any prop is false!';
}

return true;
};

或者返回 void 但使用 context.fail('Any prop is false!');

的函数

旁注:

我的真实世界用例场景是一个具有两个属性的对象,其中一个是具有 id 的对象,另一个属性是一个包含具有 id 的对象的数组。我必须确保来自这两个属性的所有 ID 都是完全唯一的。

最佳答案

这使得示例按预期工作。

ajv.addKeyword({
keyword: "eachPropIsTrue",
type: "object",
schemaType: "boolean",
compile: () => data => Object.values(data).every(value => !!value)
});

无论如何,我强烈建议更好地检查ajv user-defined keywords documentation .

关于javascript - 如何设置自定义 AJV 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71673483/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com