如何在 AJV 错误的错误消息中使用 属性 名称

How to use property names in error messages with AJV errors

我正在将 ajv-errors 与 ajv v8 一起使用 - 根据 docs 我应该能够使用指针来引用字段名称,但我的尝试失败并出现错误,例如:Cannot access property/index 0 levels up, current level is 0

示例架构:

{
  $schema: "http://json-schema.org/draft-07/schema#",
  type: "object",
  additionalProperties: false,
  properties: {
    name: { type: "string" }
  },
  required: ["name"],
  errorMessage: {
   required:  'Field ${0#} is so required'
  }
}

有什么想法吗?我可能会使用绝对指针,但我不确定为了创建路径这实际上指的是什么数据。

0# 是当前成员名称或数组索引的 relative json pointer

ajv-errors 将此查找基于它正在验证的 { field: value } 数据,而不是模式中的某处。

因此,在 属性 errorMessage 中,您可以访问上一级对象:

{
  type: "object",
  properties: {
    named: {
      type: "string",
      errorMessage: {
        type: 'Field ${0#} is so ', // 'Field "named" is so {"named":2}'
      },
    },
  },
}

出现 required,没有字段或值,因此没有要查找的数据。

const schema = {
  type: "object",
  properties: {
    name: {
      type: "string",
    },
  },
  required: ["name"],
  errorMessage: {
    required: {
      name: 'Field "name" is so [=11=]', // 'Field "name" is so {}'
    }
  },
}

您可以像上面那样为每个字段添加显式消息。