首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AJV总是返回true

AJV总是返回true
EN

Stack Overflow用户
提问于 2019-08-23 02:14:43
回答 1查看 627关注 0票数 0

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

代码语言:javascript
复制
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

我的代码出了什么问题?这是一个基本的例子。

EN

回答 1

Stack Overflow用户

发布于 2019-08-23 23:18:17

空模式可以是{},也可以是其键都不属于JSON schema词汇表的对象。无论哪种方式,空模式总是返回true:

代码语言:javascript
复制
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方法,它将按预期工作。

代码语言:javascript
复制
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)
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/ajv/6.10.2/ajv.min.js"></script>

或者,您可以向您的模式添加一个$id,并使用Ajv的getSchema方法获得一个验证函数。

这也行得通:

代码语言:javascript
复制
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)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57615009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档