【问题标题】:How add keyword Nullable (or allowNull) into Ajv?如何将关键字 Nullable(或 allowNull)添加到 Ajv 中?
【发布时间】:2018-01-26 18:19:14
【问题描述】:

我写了以下代码。

var ajv = new require('ajv');

ajv.addKeyword('allowNull', {
    type: 'null',
    metaSchema: {
        type: 'boolean'
    },
    compile: function(allowNullEnable, parentSchema) {
        return function(data, dataPath, parentData) {
            if (allowNullEnable) {
                return true;
            } else {
                if (parentSchema.type == 'null') {
                    return true;
                } else {
                    return data === null ? false : true;
                }
            }
        }
    }
});

var schema = {
  type: "object",
  properties: {
    file: {
      type: "string",
      allowNull: true
    }
  }
};

var data = {
   file: null
};

console.log(ajv.validate(schema, data)) // Expected true

但它不起作用。这样的验证器怎么写?

即使编译函数总是返回true,它仍然没有通过验证。

可以在节点沙箱中测试代码: https://runkit.com/khusamov/59965aea14454f0012d7fec0

【问题讨论】:

    标签: node.js ajv


    【解决方案1】:

    您不能覆盖 type 关键字。 null 在 JSON 中是一个单独的数据类型,所以你需要在你的架构中使用"type": ["string", "null"],不需要使用自定义关键字。

    【讨论】:

    • 我需要为 Swagger 格式创建两个关键字。例如可空和鉴别器。所以我需要这个关键字的形式。方案无法更改。
    • 可以使用 inline 关键字来完成,但它相当复杂。见github.com/epoberezkin/ajv/issues/486
    • 我读过这个问题。如果我理解正确,没有解决方案,也不会?
    • 可以使用 inline 关键字完成,并且只适用于 allErrors: true 模式。您无法更改类型验证过程,但您可以分析和修改收集的错误,就像 ajv-errors 一样,因此如果类型验证失败但数据为 null 且可为空:true 您将删除错误。
    猜你喜欢
    • 2014-11-26
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2012-11-15
    • 2018-03-22
    • 2014-09-04
    • 2014-04-13
    • 2014-01-02
    相关资源
    最近更新 更多