- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在决定一个可用于客户端和服务器端验证的验证库。我一直在比较 JOI(+ joi-browser)和 AJV。
据我了解,JOI 和 AJV 可以完成同样的事情。
AJV 甚至可以执行 JOI 无法执行的异步验证。似乎 AJV 也验证了写在 standardized format 中的 JSON 模式。这很方便,但它不像 JOI 那样对开发人员友好。
JOI拥有的明星和贡献者是 AJV 的两倍多.
为什么JOI的人气是AJV的两倍?
最佳答案
AJV 和 Joi 之间的重要区别在于 AJV 是 JSON Schema 验证器,而 Joi 是 JavaScript 验证器。 JSON Schema 是跨平台的,而 Joi 仅适用于 JavaScript。因此,这不是 AJV 和 Joi 之间的选择,而是 JSON Schema 和 Joi 之间的选择。
每种方法都有其权衡取舍,因此您选择哪种方法在很大程度上取决于您的具体情况。
AJV/JSON 模式
JSON Schema 的最大优势在于它是跨平台的。 JSON Schema 验证器实现存在于每种主要的编程语言中。无论您选择哪种语言,您都可以在前端和后端使用相同的 JSON Schema,并获得一致的验证结果。一次编写,随处验证。
缺点是因为它是跨平台的,所以它的功能也有所限制。它故意保持足够简单,以便用任何编程语言实现都不会太困难。因为 JSON Schema 不是一种成熟的编程语言,所以它的功能有限。
如果您在后端使用的不是 JavaScript,或者您的应用程序是一个公共(public) API,可以由任何数量的应用程序以任何数量的语言使用,您可能会选择 AJV/JSON Schema。
乔伊
Joi 最大的优势是它的可用性。它易于使用、易于扩展,并且具有 JavaScript 的全部功能。
不利的一面是,如果您想在前端和后端重用验证逻辑,则后端语言的唯一选择是 node。
如果您将 JavaScript 用于前端和后端,并且不期望您需要支持的非 JavaScript 客户端,您可能会选择 Joi。这是一个相当狭窄的情况,但如果是你的情况,你可能会得到比 AJV/JSON Schema 更多的输出或 Joi。
人气
Github 明星并不是一个很好的人气衡量标准。如果您查看 npm 每日下载量,您会看到一个非常不同的故事(AJV:18.9M,Joi:2.2M)。 JSON Schema 使用更广泛,因为它是跨平台的。 AJV 只是一种语言的一种实现。但是,如果您的开发堆栈适合 Joi 的特定利基,那么它可能是一个不错的选择,或者是比 JSON Schema 更好的选择。
关于javascript - 为什么JOI比AJV更受欢迎?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54228539/
背景 快速 json 架构 jv 问题 当我将 setErrorHandler 添加到我的项目/index.js 时,它不起作用。 require('module-alias/register') c
背景 快速 json 架构 jv 问题 当我将 setErrorHandler 添加到我的项目/index.js 时,它不起作用。 require('module-alias/register') c
每次尝试安装 zapier-cli 时我都会收到该消息。有人可以帮我解决这个问题吗? 最佳答案 我认为您需要手动安装ajv,或者如果您已经安装了较低版本,请将其更新到版本6 npm i ajv 我遇到
我有以下架构和 json 来使用 ajv 进行验证。我正在开发一个 REST API,它采用 JSON 并根据模式进行验证,并返回错误(400- 带有 ajv 错误)或(200 - 成功验证时) co
我将 ajv 与 TypeScript 一起使用,并且有一个自定义类型 MyCustomType。创建验证架构时,我想确保特定属性的类型为 MyCustomType。因此 ajv 应该验证其结构并决定
是否可以使用 AJV 来引用以前未通过 addSchema() 添加的模式? ? 我想解决这样的引用: { "$schema": "http://json-schema.org/draft-0
我正在使用AJV作为我的 API 输入模式验证器。 我需要验证是否收到了这种格式的数据: floors: [ { name: "Floor 1", rooms:
我已经编写了一个模式,但它似乎没有像我预期的那样有效。我假设我的模式语法有问题但无法弄清楚。我希望在筹款事件完成之前不会看到标题或目标的错误消息,因为只有在筹款事件完成时才需要它们。我尝试了很多组合,
我正在使用 AJV 库来验证我的 JSON 架构。我希望能够将 Startdate 验证为一个字符串。在不是字符串的情况下,应该转换为N/A。目前,它只能将 undefined 转换为 N/A。 但是
我需要通过以下方式验证 JSON 文件: const setupSchema = fs.readFileSync(schemaDir +'/setup.json'); 和编译: const setup
我正在使用 ajv并希望添加一个自定义验证器来检查给定的对象。此自定义验证器应返回 true 或失败并显示正确的错误消息。基于 (不推荐使用的语法)AJV custom keyword validat
我正在寻找是否可以引用属性名称作为 AJV 定义中的 enum 值。 这是一个例子: { "$id": "modes.json", "description": "Example modes"
我使用 ajv 进行 json 验证。我需要验证字符串数组。我知道哪些元素可以放在那里,所以我做了适当的“枚举”。但在某些情况下,枚举可以为空,数组也可以为空。下面是简单的测试: var schema
我正在尝试使用此正则表达式 ^+[0-9]{9,12}$ 验证字符串(电话号码) 但我得到这个错误... .pattern should match format "regex" ... 我已经浏览了
TLDR:我需要自定义 JSON 表单提供的默认错误消息。例如,如果字段是 required然后 JSON 形式给出类似 is a required property 的错误,我希望它返回错误消息文本
我将 ajv-errors 与 ajv v8 一起使用 - 根据 docs我应该能够使用指针来引用字段名称,但我的尝试失败并出现错误,例如:Cannot access property/index 0
我正在尝试找到一种方法来更改模式验证,以找到最适合给定对象的模式。假设我们有一个架构: { "oneOf": [ { "$ref": "#/definitions/a"
为什么即使对象错误,验证函数也总是返回 true? const Ajv = require('ajv') const ajv = new Ajv() const schema = { quer
我正在使用 AJV 尝试验证一些数据并根据另一个属性的值动态地要求属性。 我想要验证的是:- 始终需要enabled,- 如果 enabled = true 则仅使用其他属性之一(realtime、t
我正在尝试将自定义错误消息添加到我的应用程序输入字段,但是当我尝试获取此错误时: Error: strict mode: unknown keyword: "errorMessage" 这是代码。 文
我是一名优秀的程序员,十分优秀!