NodeJS Ajv 模块总是记录消息'$ref:路径“#”的模式中忽略的关键字'

Posted

技术标签:

【中文标题】NodeJS Ajv 模块总是记录消息\'$ref:路径“#”的模式中忽略的关键字\'【英文标题】:NodeJS Ajv module alway log message ' $ref: keywords ignored in schema at path "#" 'NodeJS Ajv 模块总是记录消息'$ref:路径“#”的模式中忽略的关键字' 【发布时间】:2019-05-14 23:01:44 【问题描述】:

我正在使用 ajv 来验证正文请求。随着每个请求的到来,ajv 工作正常,但它总是记录消息'$ref:keywords ignored in schema at path "#"'

我有 2 个架构,login.jsonlogin.defs.json

login.defs.json 定义一个通用架构定义,login.json 引用它。

login.json


  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "$id": "http://blog-js.com/login.schema#",
  "$ref": "login.defs#/definitions/login"

login.defs.json


  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://blog-js.com/login.defs#",
  "additionalProperties": false,
  "definitions": 
    "login": 
      "type": "object",
      "required": [
        "account",
        "password"
      ],
      "properties": 
        "account": 
          "description": "The account or email of user",
          "type": "string",
          "minLength": 1,
          "maxLength": 255
        ,
        "password": 
          "description": "The password of user",
          "type": "string",
          "minLength": 1,
          "maxLength": 32
        
      
    
  

请告诉我我做错了什么?

【问题讨论】:

【参考方案1】:

我认为这是因为您将 additionalProperties 关键字设置在错误的位置,而 Ajv 只是在告诉您。

如果那是 login.json 的架构,您不应该看到该消息。


  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://blog-js.com/login.schema#",
  "$ref": "login.defs#/definitions/login"

对于login.defs.json,该关键字应属于login 的架构:


  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "http://blog-js.com/login.defs#",
  "definitions": 
    "login": 
      "type": "object",
      "required": [
        "account",
        "password"
      ],
      "properties": 
        "account": 
          "description": "The account or email of user",
          "type": "string",
          "minLength": 1,
          "maxLength": 255
        ,
        "password": 
          "description": "The password of user",
          "type": "string",
          "minLength": 1,
          "maxLength": 32
        
      ,
      "additionalProperties": false
    
  

【讨论】:

成功了。但我认为ajv的信息并不明确。谢谢

以上是关于NodeJS Ajv 模块总是记录消息'$ref:路径“#”的模式中忽略的关键字'的主要内容,如果未能解决你的问题,请参考以下文章

AJV 的验证器总是返回真值

类型的 Ajv 自定义错误消息

如何使用 AJV 创建自定义错误消息?

在 AWS Lambda 上使用 nodejs“ref”模块时出现“无效的 ELF 标头”

nodejs的Buffer有办法像c的结构体那样用吗

最新的 AJV 和 ajv-formats 必须在 React 中被打破