配置项

英文原地址

默认值:

{
  // 验证 和 报告 配置项:
  $data:            false,
  allErrors:        false,
  verbose:          false,
  $comment:         false, // Ajv 6.0 中新增的属性
  jsonPointers:     false,
  uniqueItems:      true,
  unicode:          true,
  nullable:         false,
  format:           'fast',
  formats:          {},
  unknownFormats:   true,
  schemas:          {},
  logger:           undefined,
  // 引用 schema 的配置项
  schemaId:         '$id',
  missingRefs:      true,
  extendRefs:       'ignore', // 推荐 'fail'
  loadSchema:       undefined, // function(uri: string): Promise {}
  // 修改验证数据的配置项:
  removeAdditional: false,
  useDefaults:      false,
  coerceTypes:      false,
  // 严格模式配置项
  strictDefaults:   false,
  strictKeywords:   false,
  strictNumbers:    false,
  // 异步验证配置项:
  transpile:        undefined, // 需要 ajv-async 包
  // 高级配置项
  meta:             true,
  validateSchema:   true,
  addUsedSchema:    true,
  inlineRefs:       true,
  passContext:      false,
  loopRequired:     Infinity,
  ownProperties:    false,
  multipleOfPrecision: false,
  errorDataPath:    'object', // 已废弃
  messages:         true,
  sourceCode:       false,
  processCode:      undefined, 
  // ↑ function (str: string, schema: object): string {}
  cache:            new Cache,
  serialize:        undefined
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
验证和报告配置项 描述
$data 支持$data 引用。默认添加了 Draft 6 的元 schema。如果您希望使用其他元 schema,则需要使用$dataMetaSchema方法来添加对$data 引用的支持。
allErrors 检查所有收集了全部错误的规则。默认在第一个错误后返回。
verbose 默认值为false。在报错中涵盖了对部分 schema (schemaparentSchema)和验证数据的引用。
$comment
Ajv 6.0 中新增的属性
$comment关键字的值记录或传递给函数。

可配置的值为:
- false(默认值) 忽略$comment关键词。
- true 将关键字的值记录到控制台。
- 函数:传入关键字的值、其 schema 路径和根 schema 传入指定函数。
jsonPointers 不使用常规 JavaScript 属性访问方式而是使用JSON 指针而来设置错误的dataPath属性。
uniqueItems 默认为true。验证uniqueItems关键字。
unicode 默认值为true。使用 unicode 对来计算字符串的正确长度。若设置为false,则使用.length来计算,速度更快但按照 unicode 对来计算的字符串长度就“不正确”了 —— 每个 unicode 对都被计算为两个字符。
nullable 支持第三版开放 API 规范中的nullable关键字。
format 格式验证模式。配置项的值:

- "fast"(默认值):简单且快速地验证(请参阅Formats,了解可用的格式以及受此配置项影响的详细信息)。
- "full":严格且缓慢的验证。例如:25:00:00和2015/14/33在full模式下是无效的时间和日期,但在fast模式下则有效。
- 忽略所有格式关键字。
formats 具有自定义格式的对象。键和值将传给addFormat方法。
keywords 具有自定义关键字的对象。键和值将传给addKeyword方法。
unknownFormats 对未知格式的处理方法。可配置的值如下:

- true(默认值):如果遇到未知的格式,则在 schema 编译期间抛出异常。如果格式关键字值是$data 引用,并且未知,验证将失败。
- [String]:一个将要忽略掉的未知格式名称的数组。该配置项可用来允许使用并未定义格式的第三方 schema,但如果使用了其他未知格式,则仍然失败。如果format关键字的值是$data 引用,并且它不在这个数组中,验证将失败。
- "ignore":在 schema 编译期间记录警告并始终通过验证(5.0.0之前版本中的默认行为)。不建议使用此选项,因为它允许输入错误的格式名称,并且在没有任何错误消息的情况下不会对其进行验证。这个行为是 JSON schema 规范所要求的。
schemas 将添加到实例中的 schema 数组或对象。为了传递数组,schema 中必须包含id。当传递对象时,将为该对象中的每个 schema 调用方法addSchema(value, key)
logger 设置日志方法。默认是在控制台输出,有logwarningerror三种。参见错误日志。配置项的值:

- 自定义日志:应该有logwarningerror三种方法,如果缺少任意一个则会抛出异常。
- false:禁用日志。
引用 schema 的配置项 描述
schemaId 该配置项定义将哪些关键字用作 schema URI。它的值如下:

- "$id"(默认值):只使用(在JSON schema draft-06/07 中指定的)$id关键字作为 schema URI,忽略id关键字(如果出现警告将记录到日志中)。
-"id":只使用(在 JSON schema draft-04 中指定的)id关键字作为 schema URI,忽略$id关键字(如果出现警告将记录到日志中)。
- "auto": 使用$idid关键字作为 schema URI。如果(在同一个 schema 对象中)两者都存在且不同,则在 schema 编译期间将抛出异常。
missingRefs 处理丢失的引用 schema 的方法。它的值如下:

- true(default): 如果在编译期间无法解析引用,则抛出异常。抛出的错误拥有missingRef(带有散列片段)和missingSchema(没有散列片段)属性。这两个属性都是相对于当前基本id(通常是 schema id,除非被替换)进行解析的。
- "ignore":在编译期间打印错误并始终通过验证。
- "fail":以打印错误并成功编译 schema,但如果规则已检查,则验证失败。
extendRefs 当 schema 中存在$ref时,验证其他关键字。它的值如下:

- "ignore"(默认):当使用$ref时,将会(按照JSON 引用标准)忽略其他关键字。在 schema 编译期间将记录一个警告。
- "fail"(推荐):如果其他验证关键字与$ref一起使用,则在编译 schema 时将抛出异常。建议使用此配置项以确保 schema 中没有忽略的关键字,否则可能会造成混淆。
- true:使用$ref(5.0.0 之前版本中的默认行为)验证 schema 中的所有关键字。
loadSchema 当使用compileAsync方法并且缺少一些引用(配置项项missingRefs不是‘fail’‘ignore’)时,用来加载远程 schema 的异步函数。此函数应接受远程 schema uri 作为参数,并返回结果为 schema 的 Promise。参见异步编译中的示例。
修改验证数据的配置项 描述
removeAdditional 删除额外属性 —— 参见筛选数据中的示例。如果使用addMetaSchema方法添加 schema,则不使用此选项。它的值如下:

- false:并不移除额外属性。
- "all":删除所有额外属性,无论 schema 中的additionalProperties关键字如何(并且没有对它们进行验证)。
- true:只有添加了additionalProperties关键字等于false的额外属性才会被删除。
- "failing":schema 验证失败的额外属性将被删除(其中additionalProperties关键字为false或 schema)。
useDefaults 使用相应的default关键字的值替换丢失的或未定义的属性和项。默认行为是忽略default关键字。如果使用addMetaSchema方法添加 schema,则不使用此选项。参见配置默认值中的示例。它的值如下:

- false(默认值):不使用默认值。
- true:按值插入默认值(使用对象文字)。
- "empty":除了缺失或未定义,属性和项的默认值为null""(一个空字符串)。
- "shared":已废弃,不翻了。
coerceTypes 更改数据的数据类型以匹配类型关键字。请参见强制数据类型强制转换规则的示例。它的值如下:

- false(默认值):无强制类型。
- true:强制值数据类型。
- "array":除了在值类型之间强制使用外,还可将值数据强制转换为只有一个元素的数组,反之亦然(根据 schema 的要求)。
严格模式配置项 描述
strictDefaults 报告会忽略 schema 中的default关键字。它的值如下:

- false(默认值):忽略的默认值不会报告。
- true:如果存在忽略的默认值,则抛出错误。
- "log":如果出现忽略的默认值,则记录并警告。
strictKeywords 报告会忽略 schema 中的未知关键字。它的值如下:

- false(默认值):未知的关键字不会报告。
- true:如果存在未知的关键字,则抛出错误。
- "log":如果出现未知的关键字,则记录并警告。
strictNumbers 严格验证数字,NaNInfinity会验证失败。它的值如下:

- false(默认值)NaNInfinity将通过数字类型验证。
- trueNaNInfinity不会数字类型验证。
异步验证配置项 描述
transpile 需要ajv-async包。它将决定 Ajv 是否转换编译的异步验证函数。它的值如下:

- undefined:如果不支持异步函数,则使用nodent进行转换。
- true:总是使用nodent进行转换。
- false:不转换。如果不支持异步函数则抛出错误。
高级配置项 描述
meta (默认值:true) 添加元 schema,以便它可以被其他 schema 使用。如果传入了一个对象,它将作为没有$schema关键字的 schema 的默认元 schema。这个默认的元 schema 必须具有$schema关键字。
validateSchema (默认值:true) 根据元 schema 验证添加/编译的 schema。schema 中的$schema属性可以是draft07或为空(将使用 draft07 元 schema),也可以是对之前通过addMetaSchema方法添加的 schema 的引用。它的值如下:

- true(默认值):如果验证失败则抛出错误。
- "log":如果验证失败,抛出错误。
- false:跳过 schema 验证。
addUsedSchema 如果有不以"#"开头的$id(或id)属性,则使用默认方法compilevalidate向实例中添加 schema。如果存在$id且不是唯一的,则会抛出异常。将该配置项设置为false可以跳过向实例添加 schema 和使用这些方法时的$id惟一性检查。此配置项不影响addSchema方法。
inlineRefs 影响引用 schema 的编译。它的值如下:

- true(默认值):引用的 schema 若不存在 refs 则是内联引用,不管它们的尺寸如何 —— 这在很大程度上提高了性能,但代价是编译的 schema 函数更大。
- false:以非内联引用的 schema (它们将被编译为单独的函数)。
整数:限制将要内联 schema 的关键字的最大数量。
passContext 向自定义关键词函数传入验证上下文。如果设置为true并且您通过validate.call(context, data)将某个上下文传入编译验证函数,那么就可以在您的自定义关键词中的this使用context。默认的this是 Ajv 实例。
loopRequired 默认情况下required关键字会被编译为单个表达式(或是allErrors的语句序列)。如果在这个关键字中有大量的属性,这可能会导致一个非常大的验证函数。通过传入一个整数来设置在循环中验证required关键字的属性数 ———— 更小的验证函数但性能更差。
ownProperties 默认情况下,Ajv 遍历所有可枚举的对象属性;该值为true时,只迭代自己的可枚举对象属性(即直接在对象上找而不是在其原型上找)。
multipleOfPrecision 默认情况下,multipleOf关键字通过将除法结果与该结果parseInt()后的值进行比较来验证。它适用于大于 1 的除数。对于像 0.01 这样除数,除法的结果通常不是整数(即使它应该是个整数)。如果您需要使用分数,请将该项设置为正整数 N,以便验证multipleOf时可以使用这个公式:Math.abs(Math.round(division) - division) < 1e-N(它的速度虽然慢一点,但允许浮点数计算偏差)。
errorDataPath 已废弃,不翻了。
messages 默认值true。在错误中包含易于识别的信息,若要自定义信息可以设置为false。(比方说搭配ajv-i18n)
sourceCode 为验证函数添加sourceCode属性(用于调试;这段代码可能与toString调用的结果不同)。
processCode 函数,用于在将生成的代码传递给函数构造函数之前对其进行处理。它既可以用来美化函数(生成的验证函数没有换行),也可以用来置换代码。从 5.0.0 版本开始,使用下面的值:

- beautify:使用js-beautify格式化生成的函数。如果您想要美化生成的代码,可以传入调用require('js-beautify').js_beautify的函数,如processCode: code => js_beautify(code)
- transpile 转换异步验证功能。您仍然可以在ajv-async包中使用transpile选项。有关更多信息,请参阅异步验证
cache 缓存实例,用于存储使用稳定字符串化 schema 作为键的已编译模式。例如,可以使用集合关联缓存sacjs。如果没有传入任何值将使用一个简单的 hash 表,这对于常见用例(静态定义且数量有限的 schema)来说已经足够了。缓存应该有put(key, value)get(key)del(key)clear()方法。
serialize 函数序列化模式以缓存键。传递false以使用 schema 本身作为键(比方说用WeakMap作缓存的话)。默认使用了fast-json-stable-stringify