npm 包 egg-ajv 使用教程

阅读时长 5 分钟读完

在前端开发过程中,数据格式校验是一个很重要的部分。在 Node.js 项目中,我们通常会使用一个叫做 ajv 的库来进行数据格式校验。而 egg-ajv 是基于 Egg 框架的一个给 ajv 库提供约定的使用方式的插件,其有着以下特性:

  • 基于 ajv,默认支持 JSON Schema 规范
  • 引入热更新机制,支持动态调整校验规则
  • 引入 ajv-errors 包,提供友好的错误信息

本篇文章将详细介绍如何使用 egg-ajv 实现数据格式的校验。

安装

在安装 egg-ajv 之前,你需要有一个基于 Egg 框架的项目。如果没有,可以按照官方指南搭建一个。

  1. 通过 npm 安装 egg-ajv。

    npm i egg-ajv --save

配置

在 config/plugin.js 中启用 egg-ajv 插件。

在 config/config.default.js 中配置校验规则。以下是一个例子:

-- -------------------- ---- -------
-------------- - -
  ---- -
    -------- -
      -- -------
      ------- -------------------
    --
    --------- -
      -- -------
      -------- -
        ----- ---------
        ----------- -
          ------ - --- ------
        -
      -
    --
    -------- -
      -- -------
      ------------ -
        ----------- -
          -------- -
            ----- ---------
            -------- -----------------------
          -
        -
      -
    --
    -- ---- ----------------
    ----------------- ------
    -- -------
    ------------ -
      ------ -----------
    -
  -
--
  • formats: 为 ajv 添加自定义格式化函数;
  • keywords: 为 ajv 添加自定义关键字;
  • schemas: 定义嵌入式的校验规则;
  • removeAdditional: 是否自动移除校验中新增的字段,推荐启用;
  • errorConfig: 自定义错误信息的配置。

使用

在使用 egg-ajv 进行数据校验之前,需要先创建一个 validator 实例。

调用 getValidator 函数时需要传入两个参数:

  • file: 规定的校验文件名(不包含后缀名);
  • mode: 表示应用于哪个 part,请求参数中的 query、cookie、header 或者 body。

validator 可以使用 validate 和 validateOrThrow 方法进行校验。validate 方法可以返回布尔类型的值,而 validateOrThrow 方法将会在校验失败时抛出异常。

补充一个完整的 Egg Controller 示例:

-- -------------------- ---- -------
----- ---------- - --------------------------

----- -------------- ------- ---------- -
  ----- ---------- -
    ----- --------- - ------------------------------------- ---------
    --- -
      ----- ------ - ----- -------------------------------------
    - ----- --- -
      -------------- ------ ---------------
    -
    ----- ----- - ----- ---------------------------------
    -------- - - ----- --
  -
-

在以上示例中,我们创建了一个 validator 实例,然后使用其中的 validateOrThrow 方法校验了请求参数。如果校验出错,我们通过 ctx.throw 抛出了异常。否则我们调用了业务层模块来查询用户列表并返回相应结果。

结论

通过 egg-ajv,我们可以非常方便的实现数据格式校验,并得到友好的错误提示,这可以帮助我们提高项目的健壮性和高可用性。在实际项目中推荐结合RESTful API设计指南 进行规范化开发,使用数据类型定义并打造优秀的开发习惯。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065b4bc6eb7e50355dbfe3

纠错
反馈