引言
在现如今的前端开发中,数据校验是非常重要的一个环节,而且随着应用场景的复杂化,校验的需求越来越多。传统的校验方式往往会造成重复劳动,而且代码量也会变得越来越多,所以我们需要找到更好的解决方案。
在这种情况下,一种新的校验工具 Chai-Json-schema 诞生了。
Chai-Json-schema 简介
Chai-Json-schema 是一个基于 Chai 和 json-scheme 库的插件,它能够使开发者非常方便地对 JSON 格式进行校验。
它能够帮助我们完成数组、字符串、数字等基础数据类型的校验,也可以帮助我们完成嵌套 JSON 和一些自定义的数据类型的校验。
Chai-Json-schema 不仅能够简化我们的校验过程,还能让我们更好的明确数据的结构,从而帮助我们更好的开发和维护代码。
安装
首先,我们需要在项目中安装 Chai 和 json-scheme 的库。
npm install chai json-schema
然后我们需要在代码里导入这个库:
import chai from 'chai'; import chaiJsonSchema from 'chai-json-schema'; chai.use(chaiJsonSchema);
使用
假设我们需要对下面的 JSON 进行校验:
-- -------------------- ---- ------- ----- ---- - - ----- ----- ---- --- ------ -------------------- -------- - --------- ----- ----- ----- -------- -------- -- -------- ------ -展开代码
现在我们需要校验 user 这个 JSON 是否符合下面的规则:
- name 为字符串,长度在 2 到 20 之间
- age 为数字,且大于 0 小于 100
- email 是一个字符串,符合邮箱格式
- address 是一个嵌套的 JSON,包含 province、city 和 address 三个属性,分别为字符串类型
- hobbies 是一个字符串数组,包含了 “游泳” 这个元素
我们可以使用 Chai-Json-schema 提供的两种方法进行校验:
expect(value).to.be.jsonSchema(schema)
value 表示要校验的 JSON,schema 表示校验规则,可以有以下几种类型:
- 一个 JSON schema 对象(已经定义好的)
- 一个 Joi 对象(需要使用
joi-to-json-schema
库将其转换为 JSON schema 对象) - 一个字符串,表示 JSON schema 的 URL,Chai-Json-schema 会通过网络获取这个 schema 文件以进行校验。
那么我们可以编写下面的代码:
-- -------------------- ---- ------- ----- ---------- - - ----- --------- ----------- - ----- - ----- --------- ---------- -- ---------- -- -- ---- - ----- --------- -------- -- -------- --- -- ------ - ----- --------- ------- ------- -- -------- - ----- --------- ----------- - --------- - ----- -------- -- ----- - ----- -------- -- -------- - ----- -------- - -- --------- ------------ ------- ---------- -- -------- - ----- -------- ------ - - ----- --------- ----- ------ - - - -- --------- -------- ------ -------- ---------- ---------- -- ---------- -------- --- ---- -------- -- -- - ------------------------------------------ ---展开代码
在这个测试用例中,我们使用 expect(user).to.be.jsonSchema(userSchema) 的语法对 user 进行了校验,最终我们对错误的输出为:
expect(request).to.be.jsonSchema(userSchema); $ JSON value does not match schema: ┌─────────┬─────┬────────────┐ │ (index) │ err │ val │ ├─────────┼─────┼────────────┤ │ 0 │ 'should have required property \'hobbies\'' │ { name: '小明', age: 18, email: 'xiaoming@test.com', address: { province: '广东', city: '深圳', address: '南山区科技园' } } │ └─────────┴─────┴────────────┘
我们成功的解决了上述的问题。通过这种方式,我们可以清晰的定义 JSON 的规则,并且很方便地进行校验。
expect(value).to.have.jsonSchema(schema)
此方法是专门用来校验 JSON 的属性是否符合规则。
还是使用 user 对象为例,我们现在想校验 user 的 hobbies 属性是否符合定义。我们可以在这里定义一个 hobbiesSchema 对象:
-- -------------------- ---- ------- ----- ------------- - - ----- -------- ------ - - ----- --------- ----- ------ - - -- ---------- -------- --- ------- -- --- ---- -------- -- -- - ----------------------------------------------- ---展开代码
可以看到,Chai-Json-schema 使得我们能够非常方便的进行校验。
小结
在本篇文章中,我们通过对 Chai-Json-schema 库的介绍和实际使用,了解了这个库的基本功能和使用方法。
通过使用 Chai-Json-schema,开发者可以更快地完成数据校验工作,并且可以很方便地明确 JSON 的结构,从而帮助我们更好地开发和维护代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67cd937fe46428fe9e72c766