Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么JOI比AJV更受欢迎?_Javascript_Validation_Jsonschema_Joi_Ajv - Fatal编程技术网

Javascript 为什么JOI比AJV更受欢迎?

Javascript 为什么JOI比AJV更受欢迎?,javascript,validation,jsonschema,joi,ajv,Javascript,Validation,Jsonschema,Joi,Ajv,我正在决定一个可以用于客户端和服务器端验证的验证库。我一直在比较JOI(+JOI浏览器)和AJV 据我所知,JOI和AJV可以完成同样的事情。 AJV甚至可以在JOI无法执行的地方执行异步验证。AJV似乎也验证了用编写的JSON模式,这很方便,但它不像JOI那样对开发人员友好 拥有的明星和贡献者数量是美国的两倍多 为什么JOI的受欢迎程度是AJV的两倍 AJV和Joi之间的重要区别在于AJV是一个JSON模式验证器,而Joi是一个JavaScript验证器。JSON模式是跨平台的,而Joi只在J

我正在决定一个可以用于客户端和服务器端验证的验证库。我一直在比较JOI(+JOI浏览器)和AJV

据我所知,JOI和AJV可以完成同样的事情。 AJV甚至可以在JOI无法执行的地方执行异步验证。AJV似乎也验证了用编写的JSON模式,这很方便,但它不像JOI那样对开发人员友好

拥有的明星和贡献者数量是美国的两倍多


为什么JOI的受欢迎程度是AJV的两倍

AJV和Joi之间的重要区别在于AJV是一个JSON模式验证器,而Joi是一个JavaScript验证器。JSON模式是跨平台的,而Joi只在JavaScript中工作。因此,这不是AJV和Joi之间的选择,而是JSON模式和Joi之间的选择

每种方法都有其利弊,因此您选择哪种方法在很大程度上取决于您的具体情况

AJV/JSON模式

JSON模式的巨大优势在于它是跨平台的。JSON模式验证器实现存在于每种主要编程语言中。无论您选择哪种语言,都可以在前端和后端使用相同的JSON模式,并获得一致的验证结果。写一次,在任何地方验证

缺点是因为它是跨平台的,所以它的功能也有一定的局限性。它特意保持足够简单,以便在任何编程语言中都不太难实现。因为JSON模式不是一种成熟的编程语言,所以它的功能有限

如果您在后端使用的不是JavaScript,或者您的应用程序是一个公共API,可以由任意数量的应用程序以任意语言使用,那么您可以选择AJV/JSON模式

Joi

Joi最大的优势是它的可用性。它易于使用,易于扩展,并且具有JavaScript的全部功能

缺点是,如果要在前端和后端重用验证逻辑,后端的唯一语言选择是节点

如果在前端和后端使用JavaScript,而不需要支持非JavaScript客户机,则可以选择Joi。这是一个相当狭窄的情况,但如果是您的情况,您可能会得到比AJV/JSON模式更多的信息

人气


Github明星并不是一个很受欢迎的指标。如果你看npm的每日下载,你会发现一个非常不同的故事(AJV:1890万,Joi:220万)。由于JSON模式是跨平台的,所以它的应用要广泛得多。AJV只是一种语言中的一种实现。但是,如果您的开发堆栈适合Joi的特定领域,那么它可能是一个与JSON模式一样好或更好的选择。

@Jason谢谢,非常有用!您提到AJV/JSON模式的功能有限,您能澄清一下这是什么意思吗?据我所知,在根据模式验证对象时,可以使用AJV(JSON模式)和Joi(将JSON模式转换为Joi模式)完成许多相同的事情。因为AJV和Joi都能够创建自定义验证器,执行条件验证和嵌套验证,以及所有标准验证功能。@Jason,当您说“如果您使用的不是JavaScript,您可以选择AJV/JSON模式”时AJV是Javascript的JSON模式验证器,所以我认为这句话有误导性。我想你指的是验证测试结果的能力。这是正确的吗?关于:JSON模式限制。AJV通过自定义功能和自定义插件绕过了大部分限制,但当您使用这些自定义功能时,您会失去与其他JSON模式库的互操作性,从而失去了选择JSON模式的全部意义。我将给出三个您不能使用JSON模式的示例。(1) 不能将一个值与另一个值进行比较。您不能强制执行
#/minWeight
小于
#/maxWeight
。(2) 你不能比较日期。JSON模式只识别JSON类型。那不包括日期。日期表示为字符串。因此,您不能强制执行最小或最大日期。(3) 不能引用外部源,如数据库或web服务。在社交媒体应用程序中,当您向网络添加好友时,您可能希望强制执行添加的好友实际上存在于您的系统中。Re:“误导性声明”。对不起,这确实令人困惑。是的,我指的是用任何语言验证JSON模式的能力。