如何将关键字Nullable(或allowNull)添加到Ajv中?

时间:2017-08-18 06:52:28

标签: node.js ajv

我写了以下代码。

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,它仍然没有通过验证。

可以在Node-sandbox中测试代码: https://runkit.com/khusamov/59965aea14454f0012d7fec0

1 个答案:

答案 0 :(得分:2)

您无法覆盖type个关键字。 null是JSON中的单独数据类型,因此您需要在架构中使用"type": ["string", "null"],而无需使用自定义关键字。