验证错误

英文原地址

在验证失败的情况下,Ajv 将错误数组分配各验证函数的errors属性(或在调用validatevalidateSchema方法时分配给Ajv实例的errors属性)。在异步验证的情况下,返回拥有errors属性的Ajv.ValidationError错误的 rejected Promise。

错误对象

每个错误对象都拥有下面的属性:

属性 描述
keyword 验证关键词
dataPath 已验证的那部分数据的路径。默认情况下dataPath使用 JavaScript 的属性访问(如 ".prop[1].subProp")。当jsonPointerstrue时,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 验证错误拥有指向对象的附加属性propertyNamedataPath。对每个属性名进行 schema 验证之后,如果无效,则会添加一个附加错误,其keyword属性和propertyName相等。

错误参数

错误中的params对象的属性取决于验证失败的关键字。

  • maxItemsminItemsmaxLengthminLengthmaxPropertiesminProperties —— limit属性(关键字的 schema,数字类型)。
  • additionalItems —— limit属性(如果items关键字是 schema 数组且additionalItemsfalse,则允许的最大项数量)。
  • additionalProperties —— additionalProperty属性(该属性并未在propertiespatternProperties关键字中使用)。
  • dependencies - 属性:
    • property(依赖属性)。
    • missingProperty(所需缺少的依赖项 —— 目前只报告第一个)。
    • deps(所需的依赖,用逗号分隔的字符串列表)。
    • depsCount(所需依赖数)。
  • format —— format属性(关键字的 schema)。
  • maximumminimum —— 属性:
    • limit(关键字的 schema,数字类型)。
    • exclusive(exclusiveMaximumexclusiveMinimum的 schema,布尔类型)。
    • comparison(比较运算,将位于左侧的数据与位于右侧限制条件进行比较;可以为"<""<="">"">="、字符串类型)。
  • multipleOf - multipleOf属性(关键字的 schema)。
  • pattern - pattern(关键字的 schema)。
  • required - missingProperty属性(缺失的属性)。
  • propertyNames - propertyName属性(无效的属性名称)。
  • patternRequired - (ajv-keyword 中的)missingPattern属性(不匹配任何属性的必需通配符)。
  • type - type属性(所需的类型,用逗号分隔的字符串列表)。
  • uniqueItems - ij属性(重复的索引项)。
  • const - allowedValue属性指向的值(关键字的 schema)。
  • enum - allowedValue属性指向的值的数组(关键字的 schema)。
  • $ref - ref属性引用的 schema URI。
  • oneOf - passingSchemas属性(传入 schema 的索引数组,如果没有传入 schema 则为空)。
  • 自定义关键字(防止关键字定义不会产生错误) - keyword属性(关键字的名称)。

错误日志

在初始化 Ajv 时使用logger配置项将允许您定义自定义日志。这里您可以构建现有的日志。也可以使用其他的日志库,只要该库向外暴露了所需的方法即可。如果缺少所需的方法会抛出异常。

  • 所需的方法:logwarnerror
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