【问题标题】:A strict mode warning from ajv when using electron-store使用电子商店时来自 ajv 的严格模式警告
【发布时间】:2021-09-25 21:14:35
【问题描述】:

我想使用electron-storeJSON Schema 保存object[],在阅读了JSON Schema 的文档后,我得到代码可以成功执行但有警告:

strict mode: "items" is 1-tuple, but minItems or maxItems/additionalItems are not specified or different at path "#/properties/todo"

我的代码是:

const Store = require('electron-store')

/** @type import('json-schema-typed').JSONSchema */
const schema = {
  todo: {
    type: 'array',
    items: [true],
    minItems: 0,
    maxItems: 999,
    additionalItems: {
      type: 'object',
      properties: {
        id: {
          type: 'number'
        },
        name: {
          type: 'string'
        }
      }
    }
  }
}

const todoStore = new Store({ schema })

const todoItem = [{ id: 1, name: '11111' }]

todoStore.set('todo', todoItem)

console.log(todoStore.get('todo'))

const newTodo = [...todoStore.get('todo')]
newTodo.push({ id: 2, name: '22222' })

todoStore.set('todo', prev)

console.log(todoStore.get('todo'))

module.exports = todoStore

我添加了minItemsmaxItems,但警告仍然出现。我检查了几个小时,但无法工作。谁能帮帮我?

顺便问一下,JSON Schema 的用法对吗?

您可以安装electron-store 并直接使用node ./xxx.js 执行它

谢谢你帮助我。

【问题讨论】:

    标签: javascript node.js electron frontend jsonschema


    【解决方案1】:

    您的架构没有问题。

    AJV 版本 8 引入了默认开启的“严格模式”。它旨在防止在编写模式时出错。

    其中一个默认设置是在以元组形式使用items 时防止不受约束的项目。

    如果“items”是一个数组,Ajv 也会记录一个警告(对于 定义一个元组)但既不是“minItems”也不是 “additionalItems”/“maxItems”关键字存在(或有错误 值):

    https://ajv.js.org/strict-mode.html#unconstrained-tuples

    我认为,尽管您没有将 additionalItems 设置为 false,但在设置 maxItems 时仍然限制了所有值。

    我将在您的 behlaf 和 cmets 中的链接上提出问题。

    直到它得到修复(如果它得到修复),您可以在初始化 AJV (https://ajv.js.org/options.html#stricttuples) 时使用配置禁用此严格模式元素

    const ajv = new Ajv({ strictTuples: false });
    

    【讨论】:

    • 非常感谢您的回答,当我添加strictTuples: false 时,它就可以工作了。但是我必须在node_modules/conf/dist/source/index.js 中添加它,并且找不到使用electron-store 配置ajv 的API 或条目。有没有其他解决方案或方法来保存object[] structrue?
    • 啊。好吧。如果你想成为一个好公民,你可以在这里做一些跳跃。看起来conf 模块不允许您访问修改ajv 配置。您需要在那里提出问题,然后将其修补并推送到下游。幸运的是,它是同一个维护者。如果有帮助,我很乐意对您提出的任何问题发表评论
    • 这个错误应该得到修复,但很可能你会选择通过配置传递给电子商店的 AJV。有人建议您可以使用npmjs.com/package/patch-package,但我不知道我对这个解决方案的感受。
    • 好吧,那太麻烦了,我决定在渲染器进程中删除架构并限制数据结构。
    猜你喜欢
    • 2021-03-09
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 2016-09-09
    • 2020-06-13
    相关资源
    最近更新 更多