验证错误
在验证失败的情况下,Ajv 将错误数组分配各验证函数的errors属性(或在调用validate或validateSchema方法时分配给Ajv实例的errors属性)。在异步验证的情况下,返回拥有errors属性的Ajv.ValidationError错误的 rejected Promise。
错误对象
每个错误对象都拥有下面的属性:
| 属性 | 描述 |
|---|---|
keyword | 验证关键词 |
dataPath | 已验证的那部分数据的路径。默认情况下dataPath使用 JavaScript 的属性访问(如 ".prop[1].subProp")。当jsonPointers为true时,dataPath将使用 JSON 指针标准进行设置(如 "/prop/1/subProp") |
schemaPath | 验证失败的关键字的 schema 的路径(JSON 指针作为 URI 片段)。 |
params | 带有关于错误的附加信息的对象,可用于创建自定义错误消息(例如,使用ajv-i18n包)。请参阅下面所有关键字设置的参数。 |
message | 标准错误消息(可以通过将配置项messages设置为false来排除)。 |
schema | 关键字的 schema (使用verbose配置项添加)。 |
parentSchema | 包含关键字的 schema (使用verbose配置项添加)。 |
data | 通过关键字验证数据(使用verbose配置项添加)。 |
请注意
propertyNames关键字 schema 验证错误拥有指向对象的附加属性propertyName、dataPath。对每个属性名进行 schema 验证之后,如果无效,则会添加一个附加错误,其keyword属性和propertyName相等。
错误参数
错误中的params对象的属性取决于验证失败的关键字。
maxItems、minItems、maxLength、minLength、maxProperties、minProperties——limit属性(关键字的 schema,数字类型)。additionalItems——limit属性(如果items关键字是 schema 数组且additionalItems为false,则允许的最大项数量)。additionalProperties——additionalProperty属性(该属性并未在properties和patternProperties关键字中使用)。dependencies- 属性:property(依赖属性)。missingProperty(所需缺少的依赖项 —— 目前只报告第一个)。deps(所需的依赖,用逗号分隔的字符串列表)。depsCount(所需依赖数)。
format——format属性(关键字的 schema)。maximum、minimum—— 属性:limit(关键字的 schema,数字类型)。exclusive(exclusiveMaximum或exclusiveMinimum的 schema,布尔类型)。comparison(比较运算,将位于左侧的数据与位于右侧限制条件进行比较;可以为"<"、"<="、">"、">="、字符串类型)。
multipleOf-multipleOf属性(关键字的 schema)。pattern-pattern(关键字的 schema)。required-missingProperty属性(缺失的属性)。propertyNames-propertyName属性(无效的属性名称)。patternRequired- (ajv-keyword 中的)missingPattern属性(不匹配任何属性的必需通配符)。type-type属性(所需的类型,用逗号分隔的字符串列表)。uniqueItems-i和j属性(重复的索引项)。const-allowedValue属性指向的值(关键字的 schema)。enum-allowedValue属性指向的值的数组(关键字的 schema)。$ref-ref属性引用的 schema URI。oneOf-passingSchemas属性(传入 schema 的索引数组,如果没有传入 schema 则为空)。- 自定义关键字(防止关键字定义不会产生错误) -
keyword属性(关键字的名称)。
错误日志
在初始化 Ajv 时使用logger配置项将允许您定义自定义日志。这里您可以构建现有的日志。也可以使用其他的日志库,只要该库向外暴露了所需的方法即可。如果缺少所需的方法会抛出异常。
- 所需的方法:
log、warn、error
var otherLogger = new OtherLogger();
var ajv = new Ajv({
logger: {
log: console.log.bind(console),
warn: function warn() {
otherLogger.logWarn.apply(otherLogger, arguments);
},
error: function error() {
otherLogger.logError.apply(otherLogger, arguments);
console.error.apply(console, arguments);
}
}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13