我在异议模型中使用此jsonSchema:
static get jsonSchema() {
return {
type: 'object',
required: ['firstName', 'lastName'],
properties: {
id: { type: 'integer' },
parentId: { type: ['integer', 'null'] },
firstName: { type: 'string', minLength: 1, maxLength: 255 },
lastName: { type: 'string', minLength: 1, maxLength: 255 },
date: {type: 'unexisting-type'},
age: { type: 'number' },
}
};
}
您可以看到日期是AJV验证无法识别的类型(由Objection.js使用)。但是,插入以下数据时,插入操作将返回成功:
{
"firstName":"sample",
"lastName":"sample",
"date":"2018-12-21 10:20"
}
为什么AJV在架构创建时不返回验证错误?
我在一个最小的JSFiddle示例中进行了测试,但确实返回了错误(AJV v6.6.2) https://jsfiddle.net/ads80y5j/
我使用Objection v1.4.0(使用AJV v ^ 6.1.1)
答案 0 :(得分:1)
运行以下代码时,我确实得到以下异常。 (如果我将代码包装在您的JSFiddle中,我也会得到类似的结果。)
模式无效:data.properties ['date']。type应该等于允许的值之一,data.properties ['date']。type应该是数组,data.properties ['date']。类型应该与anyOf中的某些模式匹配
var ajv = new Ajv({
allErrors: true
});
var schema = {
type: 'object',
properties: {
date: {
type: 'unexisting-type'
}
}
};
try {
var validate = ajv.compile(schema);
} catch (e) {
console.log(e.message);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/ajv/6.6.2/ajv.min.js"></script>
是在代码中的某个地方,您静默地吞下了异常,还是以某种方式关闭了模式本身的验证?
摘自compile
的文档:
除非validateSchema选项为false,否则将针对元架构验证传递给此方法的架构。如果架构无效,将引发错误。
答案 1 :(得分:0)
对象本身正在向Ajv传递关闭模式验证的选项,因此在Ajv模式编译时不会抛出任何错误。
就目前而言,Objection v1将保持这种行为,因为它是一项重大更改。可以在v2中添加。