Hapi 和 Joi 实现校验和转换请求数据

阅读时长 4 分钟读完

在 Web 开发中,对于客户端所发送的数据,我们通常需要对其进行校验和转换,以保证数据的正确性和可用性。Hapi 和 Joi 就是两个可以帮助我们实现这个目的的工具。接下来,我们将详细介绍 Hapi 和 Joi 的使用方法。

Hapi 框架简介

Hapi 是一个用于构建 web 应用和服务的框架,它具有以下特点:

  • 支持插件式架构,易于扩展;
  • 提供统一的请求和响应处理机制;
  • 支持路由定义和校验、表单数据解析等常用功能;
  • 面向插件的生命周期管理,支持启动和停止插件;
  • 具有详细的文档和社区支持。

Joi 校验器简介

Joi 是一个专门用于校验对象的库,它支持的特性包括:

  • 支持对字符串、数字、日期等多种数据类型进行校验;
  • 支持嵌套对象的校验;
  • 支持多种校验规则,包括必须、至少、最多、无空格等等;
  • 支持自定义校验函数和错误消息。

Hapi 和 Joi 的结合使用

Hapi 和 Joi 具有天然的结合关系,Hapi 内嵌了 Joi 校验器,可以在路由定义和请求处理中使用。接下来,我们介绍具体的使用方法。

安装和导入

首先,我们需要安装 Hapi 和 Joi:

然后,在我们的 JavaScript 文件中导入它们:

定义路由

在 Hapi 中,我们可以通过 server.route() 方法来定义路由。在路由定义中,我们可以使用 Joi 安装的一些校验规则。

例如,下面是一个使用 Joi 校验器的例子:

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

在这个例子中,我们通过 options.validate 字段配置了路由参数的校验规则。其中,params 表示路由参数,Joi.object({ ... }) 返回一个对象,包含具体的校验规则。在这个例子中,我们规定了 userId 必须是整数且大于等于 1。

处理请求

在路由函数中,我们可以接收到两个参数,它们分别是请求对象 request 和响应工具 h。我们可以使用 Joi 校验请求数据,并对校验失败的情况进行处理。

例如,下面是一个使用 Joi 校验器处理 POST 请求数据的例子:

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

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

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

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

    -- ---
  --
---

在这个例子中,我们首先从请求 payload 中获取到 nameage 两个参数。然后,创建了一个 Joi 对象,并在其中规定了 nameage 的校验规则。最后,我们使用 schema.validate() 方法进行校验,并在校验失败时返回了一个 HTTP 400 错误。

转换请求数据

除了校验外,我们还可以使用 Joi 校验器对请求数据进行转换。例如,将字符串类型的日期转换为 JavaScript 的 Date 对象:

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

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

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

在这个例子中,我们只需要在 Joi 对象的校验规则中定义相应的数据类型和解析方法即可。

总结

通过 Hapi 和 Joi 的配合使用,我们可以方便地完成请求数据的校验和转换。在实际开发中,我们应该通过合理的表单设计和校验规则定义,保证数据的正确性和可用性。

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

纠错
反馈