object-schemata
是一个基于 JSON Schema 的 Node.js/npm 包,它提供了一种结构化、灵活的方式来验证和处理 JavaScript 对象。
为什么要用 object-schemata
在前端开发中,经常需要对前端传输的数据进行验证,确保数据的正确性和安全性。而 JSON Schema 是一种通用的描述 JSON 数据结构的语言,它可以用于验证数据、生成代码、服务端/客户端数据的交互等。
object-schemata 将 JSON Schema 转换成了代码,提供了方便的 API 来在 JavaScript 中使用 JSON Schema。
安装
可以通过 npm 来安装 object-schemata:
--- ------- ---------------
使用
object-schemata 使用起来很简单。
首先,需要创建一个 JSON Schema,例如一个简单的用户对象:
- ------- --------- ------------- - ------- - ------- --------- ------------ -- -- -------- - ------- --------- --------- ------- -- ----------- - ------- --------- ------------ -- ------------ -- - -- ----------- -------- -------- ----------- -
然后,使用 object-schemata 来创建一个 Schema
对象:
----- - ------ - - -------------------------- ----- ---------- - --- -------- ----- --------- ----------- - ----- - ----- --------- ---------- -- -- ------ - ----- --------- ------- ------- -- --------- - ----- --------- ---------- -- ---------- -- - -- --------- -------- -------- ----------- --
这个 Schema
对象就可以用来验证任意的 JavaScript 对象了。例如,以下代码将会验证一个用户对象是否合法:
----- ---- - - ----- ----- ------ ----------------------- --------- -------- - ----- ------ - ------------------------- -- -------- - ---------------------------- -- --------------- - ---- - -------------------- -
如果用户对象不符合 JSON Schema 中规定的结构,validate
方法就会返回错误信息。
更多高级用法
支持自定义关键字
在 JSON Schema 中,我们可以使用 $
开头的关键字来定义一些自定义的规则。例如,以下 JSON Schema 定义了一个 range
关键字:
- ------- --------- -------- --- ---- -
如果要使用 range
关键字,需要先注册它:
----- - ----------- - - -------------------------- ------------- ------ -------- ----- ----- -- - -- ------- ---- --- --------- - ------ ---- - ----- - ----- - - ------ -- --------- -- ---- -- ---- -- --------- - ------ ---- - ------ - ----- -------- ---- ----- ------ -- -- --- ----- -- ----------- -- ------------ - - --
然后在 JSON Schema 中使用 range
关键字:
- ------- --------- -------- --- ---- -
支持自定义类型
object-schemata 内置了一些基本类型(如 string
、number
、boolean
、array
、object
),但如果需要自定义类型,也很容易。例如,以下代码定义了一个自定义类型 address
:
----- - ------- - - -------------------------- ------------------ ---- -- - -- ------- ---- --- -------- -- ------------ -- ---------- -- ---------- - ------ ---- ----- ------ -- -- ------ ---- --------------- ----------- - ------ ---- --
然后在 JSON Schema 中使用 address
类型:
- ------- --------- ------------- - ----------------- - ------- --------- -- ------------------ - ------- --------- - -- ----------- ------------------ ------------------ -
支持异步验证
有时候我们需要进行一些异步的验证,例如用户名是否已经存在等等。可以使用 addAsyncValidator
方法来添加异步验证函数。
例如,以下代码定义了一个异步验证函数 usernameExists
,它通过查询数据库来检查用户名是否已经存在:
----- - ----------------- - - -------------------------- ----------------------------------- ----- -------- ----- ----- -- - ----- -------- - ---- -- ------- ----- -------- - ----- --- --------------- -- - ------------- -- ---------------- --- ---------- ----- -- -- ---------- - ------ - ----- -------- ---- -------- --- ------- ---- ------ - - ------ ---- --
然后在 JSON Schema 中使用 usernameExists
关键字:
- ------- --------- ----------------- ---- -
支持自定义错误信息
有时候需要自定义错误信息,可以在 JSON Schema 中使用 errorMessage
关键字:
- ------- --------- ------------ -- ------------ --- --------------- ---- -------- ------ -- ---- ---------- ----- -
支持自定义消息翻译
有时候需要将错误信息翻译成不同的语言。object-schemata 支持定义消息翻译器。
例如,以下代码定义了一个简单的消息翻译函数:
----- - -------------------- - - -------------------------- ------------------------------ ----- -- - ----- ---- - - --- - ----- ---- ----- ------ -- - ----- ------ ------- ----- ---- ----- ------ -- --- -- ---------- --------- ---- ----- ------ ---- -- ----- ---------- ------- ---------- ---- ------ ------ -- -- ------ ---- ----------- ------------ ---------- ---- ------ ------ -- -- ----- ----------- ---------- ------ --------- ----------- -- --------- -- --- - ----- ------- ------ ---- ----- -------------------- --------- -------- ---------- ----- ---------- ---------- ----------- ----- ---------- --------- ----------- ----- --------- ----- ----------- - - ----- ----------- - ---------- -- ------- ----- ---- - ------------------------- ------ --------------------------- ----- -- - ------ ------------------- --- -- - ----- - ------------ --------------------------------- ------------------------------------ ----- --
然后,使用 setTranslate
方法来设置当前语言:
----- - ------------ - - -------------------------- -- --------- ---------------------
示例
最后,可以通过以下示例来更好地理解如何使用 object-schemata:
----- - ------- ------------ -------- ------------------ --------------------- ------------ - - -------------------------- -- ---- ---- ------ ----- ---------- - --- -------- ----- --------- ----------- - ----- - ----- --------- ---------- -- -- ------ - ----- --------- ------- ------- -- --------- - ----- --------- ---------- -- ---------- -- -- ------- - ----- --------- ----- -------- --------- -- -------- - ----- --------- ----------- - ------- - ----- -------- -- ----- - ----- -------- -- ---- - ----- -------- - - -- ------ - ----- -------- -- ------------ - ----- --------- ------- ----------- -- ------------ - ----- --------- ------- ----------- - -- --------- -------- -------- ------------ ------------- - --------- ----- ------------ ------ ------------ ---------- -------- ----------- ----- ---------- --------- ----------- ----- ----- --------------------- ----------------- ----------- --------------- --------- -------------- ----------- --------------- ----------- ------------ ------------ --------------------- ----------- --- ---- ----- --------------------- ----------- --- ---- ---- - -- -- ----- ------------- ------ -------- ----- ----- -- - -- ------- ---- --- --------- - ------ ---- - ----- - ----- - - ------ -- --------- -- ---- -- ---- -- --------- - ------ ---- - ------ - ----- -------- ---- ----- ------ -- -- --- ----- -- ----------- -- ------------ - - -- -- ---- ------------------ ---- -- - -- ------- ---- --- -------- -- ------------ -- ---------- -- ---------- - ------ ---- ----- ------ -- -- ------ ---- --------------- ----------- - ------ ---- -- -- ------- ----------------------------------- ----- -------- ----- ----- -- - ----- -------- - ---- -- ------- ----- -------- - ----- --- --------------- -- - ------------- -- ---------------- --- ---------- ----- -- -- ---------- - ------ - ----- -------- ---- -------- --- ------- ---- ------ - - ------ ---- -- -- ------- ------------------------------ ----- -- - ----- ---- - - --- - ----- ---- ----- ------ -- - ----- ------ ------- ----- ---- ----- ------ -- --- -- ---------- --------- ---- ----- ------ ---- -- ----- ---------- ------- ---------- ---- ------ ------ -- -- ------ ---- ----------- ------------ ---------- ---- ------ ------ -- -- ----- ----------- ---------- ------ --------- ----------- -- --------- -- --- - ----- ------- ------ ---- ----- -------------------- --------- -------- ---------- ----- ---------- ---------- ----------- ----- ---------- --------- ----------- ----- --------- ----- ----------- - - ----- ----------- - ---------- -- ------- ----- ---- - ------------------------- ------ --------------------------- ----- -- - ------ ------------------- --- -- - ----- - ------------ --------------------------------- ------------------------------------ ----- -- -- --------- --------------------- -- ---- ----- -------- ------------------ - ----- ------ - ----- ------------------------------ -- -------- - ---------------------------- -- --------------- - ---- - -------------------- - - -- ---- -------------- ----- ----- ------ ----------------------- --------- --------- ------- ------- -------- - ------- ------ ----- ----- ---- -------- -- ------ -------------- ------------ ----------------------- ------------ ---------------------- -- -------------- ----- ----- ------ ------------- --------- ----- ------- ---------- -------- - ------- --- ----- --- ---- -- -- ------ ----- ------------ ----------- ---------- ------------ --------------------------- -- -------------- ----- ----- ------ --------------------- --------- --------- ------- ------- -------- - ------- --- ----- --- ---- -- -- ------ -------------- ------------ ----------------------- ------------ ---------------------- -- ----- ---- - - ----- ----- ------ ---------------------- --------- --------- ------- --------- -------- - ------- ------ ----- ----- ---- -------- -- ------ -------------- ------------ ----------------------- ------------ ---------------------- - ----- ------ - ----- ------------------------------ -- -------- - ---------------------------- -- --------------- - ---- - -------------------- -
结束
通过这篇文章,我们学习了如何使用 object-schemata 来验证和处理 JavaScript 对象。除了上述的基本用法,object-schemata 还提供了许多高级用法,如自定义关键字、类型、异步验证、错误信息和消息翻译等等。希望这篇文章对你有所帮助。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/5ef1c5be8c4ce90ee4ca3b2e