我写了以下代码。
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
答案 0 :(得分:2)
您无法覆盖type
个关键字。 null
是JSON中的单独数据类型,因此您需要在架构中使用"type": ["string", "null"]
,而无需使用自定义关键字。