gpt4 book ai didi

javascript - AJV 始终返回 true

转载 作者:行者123 更新时间:2023-12-02 23:05:10 28 4
gpt4 key购买 nike

为什么即使对象错误,验证函数也总是返回 true?

const Ajv = require('ajv')
const ajv = new Ajv()

const schema = {
query: {
type: 'object',
required: ['locale'],
properties: {
locale: {
type: 'string',
minLength: 1,
},
},
},
}

const test = {
a: 1,
}

const validate = ajv.compile(schema)
const valid = validate(test)
console.log(valid) // TRUE

我的代码有什么问题吗?这是一个基本示例。

最佳答案

空架构是 {} 或其任何键都不属于 JSON 架构词汇表的对象。无论哪种方式,空模式总是返回true:

const ajv = new Ajv();

const validate1 = ajv.compile({});
const validate2 = ajv.compile({
"a": "aaa",
"b": [1, 2, 3],
"c": {
"d": {
"e": true
}
}
});

validate1(42); // true
validate1([42]); // true
validate1('42'); // true
validate1({answer: 42}); // true

validate2(42); // true
validate2([42]); // true
validate2('42'); // true
validate2({answer: 42}); // true

在您的情况下,schema 不包含有效的架构。然而 schema.query 确实如此。将其传递给 Ajv 的 compile 方法,它将按预期工作。

const ajv = new Ajv()

const schema = {
query: {
type: 'object',
required: ['locale'],
properties: {
locale: {
type: 'string',
minLength: 1,
},
},
},
}

const test = {
a: 1,
}

const validate = ajv.compile(schema.query)
const valid = validate(test)
console.log(valid)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ajv/6.10.2/ajv.min.js"></script>

<小时/>

或者,您可以将 $id 添加到架构中,并使用 Ajv 的 getSchema 方法获取验证函数。

这也有效:

const schema = {
query: {
$id: 'query-schema',
type: 'object',
required: ['locale'],
properties: {
locale: {
type: 'string',
minLength: 1,
},
},
},
}

const test = {
a: 1,
}

ajv.addSchema(schema)

const validate = ajv.getSchema('query-schema')
const valid = validate(test)
console.log(valid)

关于javascript - AJV 始终返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57615009/

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