引言
在编写 Web 前端应用时,数据校验是必不可少的一环。我们通常使用一些成熟的校验库来帮助我们完成这个任务,比如 JSON Schema、Joi 等。在 Egg.js 中,我们可以使用 egg-validate 来完成数据校验。而 egg-validate 本身也是基于 JSON Schema 实现的。
然而,尽管 JSON Schema 已经足以应对大部分的校验需求,但是有些时候我们还需要自定义一些校验规则,比如手机号码校验、身份证号码校验等等。这时可以使用 egg-ajv-keywords 来扩展 JSON Schema 的关键词,从而实现自定义的校验规则。
本文将介绍 egg-ajv-keywords 的使用方法,帮助你轻松实现自定义的数据校验规则。
安装 egg-ajv-keywords
egg-ajv-keywords 是一个 Egg.js 的插件,因此需要通过 npm 安装:
npm install egg-ajv-keywords --save
同时还需要安装 ajv
和 ajv-errors
:
npm install ajv ajv-errors --save
配置 egg-ajv-keywords
在 Egg.js 的配置文件 config.default.js
中添加如下配置:
-- -------------------- ---- ------- ---------- - - -------- - -- --------- --------- ---------- ---------- -- --------- ---------- ----- -- ----------- --------------- ----- -- -------------- --------------- ----- -- ------------- -------- - ---------------- ----------- -- -- -- ------ ------- ----- -- - --- ---- --- -- ------------ ----- -- ------- --- -- ---------------- ----- --
其中 options
用于配置 ajv
实例,包括自定义关键词、错误信息格式化等。keywords
是自定义的关键词,可以添加你想要的任何关键词。例如,这里添加了 mobile
和 idcard
两个关键词。如果你需要添加更多的关键词,只需要在这里添加即可。
定义自定义关键词
在 app/validator
目录下创建 keywords.js
文件,添加如下代码:
-- -------------------- ---- ------- -------------- - - -- ------ ------- - --------------- - ----- ------ - ---------------------- ------ -------- -------------- - -- ------- ---- --- -------- -- ------------------- - --------------- - -- -------- --------- -------- ------- -- - ----- ------ ----- ------- --- ------ ------ - ------ ----- -- -- ------- ----- -- -- ------- ------- - --------------- - ----- ------ - ------------------------------------------- ------ -------- -------------- - -- ------- ---- --- -------- -- ------------------- - --------------- - -- -------- --------- -------- ------- -- - ----- -- ---- ------- --- ------ ------ - ------ ----- -- -- ------- ----- -- --
上述代码定义了两个自定义关键词 mobile
和 idcard
,分别用于校验手机号码和身份证号码。这里使用了正则表达式进行校验,如果数据不符合校验规则,就会返回错误信息。同时通过 errors: true
配置将错误信息暴露给校验器。
使用自定义关键词
在 Egg.js 中使用自定义关键词非常简单。只需要在校验数据的 JSON Schema 中加入自定义关键词即可。例如,下面的代码片段定义了一个包含自定义关键词的 JSON Schema:
-- -------------------- ---- ------- -------------- - - ----- --------- ----------- - ----- - ----- -------- -- ---- - ----- --------- -------- -- -------- --- -- ------- - ----- --------- ------- ---- -- ------- - ----- --------- ------- ---- -- -- --------- -------- ------ --------- ---------- --
其中 mobile
和 idcard
是两个自定义关键词。在 Egg.js 的 Controller 中使用该 JSON Schema 进行数据校验:
-- -------------------- ---- ------- ----- -------- - ----- - --- - - ----- ----- ------ - --------------------------------------------- --- - ------------------------------ ------------------ - ----- --- - -------------------- -------------- -------- ------- ------------- - -------- - - ------- --------- -- -
总结
本文介绍了如何使用 egg-ajv-keywords 扩展 JSON Schema 的关键词,实现自定义的数据校验规则。同时,我们还介绍了如何定义自定义关键词和在 Egg.js 中使用自定义关键词进行数据校验。希望本文能帮助你更好地理解数据校验的原理和使用方法。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600572f481e8991b448e9186