为什么即使对象是错误的,验证函数也总是返回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我的代码出了什么问题?这是一个基本的例子。
发布于 2019-08-23 23:18:17
空模式可以是{},也可以是其键都不属于JSON schema词汇表的对象。无论哪种方式,空模式总是返回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)https://stackoverflow.com/questions/57615009
复制相似问题