在前端开发过程中,数据格式校验是一个很重要的部分。在 Node.js 项目中,我们通常会使用一个叫做 ajv 的库来进行数据格式校验。而 egg-ajv 是基于 Egg 框架的一个给 ajv 库提供约定的使用方式的插件,其有着以下特性:
- 基于 ajv,默认支持 JSON Schema 规范
- 引入热更新机制,支持动态调整校验规则
- 引入 ajv-errors 包,提供友好的错误信息
本篇文章将详细介绍如何使用 egg-ajv 实现数据格式的校验。
安装
在安装 egg-ajv 之前,你需要有一个基于 Egg 框架的项目。如果没有,可以按照官方指南搭建一个。
通过 npm 安装 egg-ajv。
npm i egg-ajv --save
配置
在 config/plugin.js 中启用 egg-ajv 插件。
exports.ajv = { enable: true, package: 'egg-ajv' };
在 config/config.default.js 中配置校验规则。以下是一个例子:
-- -------------------- ---- ------- -------------- - - ---- - -------- - -- ------- ------- ------------------- -- --------- - -- ------- -------- - ----- --------- ----------- - ------ - --- ------ - - -- -------- - -- ------- ------------ - ----------- - -------- - ----- --------- -------- ----------------------- - - - -- -- ---- ---------------- ----------------- ------ -- ------- ------------ - ------ ----------- - - --
formats
: 为 ajv 添加自定义格式化函数;keywords
: 为 ajv 添加自定义关键字;schemas
: 定义嵌入式的校验规则;removeAdditional
: 是否自动移除校验中新增的字段,推荐启用;errorConfig
: 自定义错误信息的配置。
使用
在使用 egg-ajv 进行数据校验之前,需要先创建一个 validator 实例。
const validator = app.ajv.getValidator('file.json', 'query');
调用 getValidator 函数时需要传入两个参数:
file
: 规定的校验文件名(不包含后缀名);mode
: 表示应用于哪个 part,请求参数中的 query、cookie、header 或者 body。
validator 可以使用 validate 和 validateOrThrow 方法进行校验。validate 方法可以返回布尔类型的值,而 validateOrThrow 方法将会在校验失败时抛出异常。
try { const result = await validator.validateOrThrow(request.query); } catch (e) { ctx.throw(400, `参数错误: ${e.message}`); }
补充一个完整的 Egg Controller 示例:
-- -------------------- ---- ------- ----- ---------- - -------------------------- ----- -------------- ------- ---------- - ----- ---------- - ----- --------- - ------------------------------------- --------- --- - ----- ------ - ----- ------------------------------------- - ----- --- - -------------- ------ --------------- - ----- ----- - ----- --------------------------------- -------- - - ----- -- - -
在以上示例中,我们创建了一个 validator 实例,然后使用其中的 validateOrThrow 方法校验了请求参数。如果校验出错,我们通过 ctx.throw 抛出了异常。否则我们调用了业务层模块来查询用户列表并返回相应结果。
结论
通过 egg-ajv,我们可以非常方便的实现数据格式校验,并得到友好的错误提示,这可以帮助我们提高项目的健壮性和高可用性。在实际项目中推荐结合RESTful API设计指南 进行规范化开发,使用数据类型定义并打造优秀的开发习惯。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065b4bc6eb7e50355dbfe3