简体   繁体   English

AJV始终返回true

[英]AJV always returns true

Why does the validate function always return true even if the object is wrong? 为什么即使对象错误,validate函数也总是返回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

What is wrong with my code? 我的代码有什么问题? It is a basic example. 这是一个基本的例子。

An empty schema is either {} or an object which none of its keys belong to the JSON Schema vocabulary. 空模式既可以是{} ,也可以是其键都不属于JSON模式词汇表的对象。 Either way an empty schema always return true: 无论哪种方式,空模式总是返回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

In your case schema does not contain a valid schema. 在您的情况下, schema不包含有效的架构。 However schema.query does. 但是schema.query确实可以。 Pass that to Ajv's compile method and it will work as expected. 将其传递给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> 


Alternatively, you could add an $id to your schema and get a validation function with Ajv's getSchema method instead. 另外,您可以在架构中添加$id ,并使用Ajv的getSchema方法获取验证功能。

This works too: 这也适用:

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)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM