根据 Hapi 框架提供的插件 joi,验证功能如何实现

阅读时长 6 分钟读完

在前端开发过程中,数据的验证非常重要,尤其在涉及到用户输入和输出的场景下。Hapi 是一个流行的 node.js 框架,它提供的 joi 插件可帮助我们轻松实现数据验证功能。本文将介绍 joi 的基本概念、使用方法及其与 Hapi 框架的结合使用方式。

Joi 的基本概念

Joi 是一种数据验证库,可以用于服务器端和浏览器端,提供了作为 JavaScript 类型系统的工具,可以验证和验证对象的正确性及类型。

与其他验证库不同,joi 采用深入对象的方式,即使用同一 API 验证嵌套对象。此外,它还支持异步验证和自定义验证函数。

joi 包括以下概念:

  1. schema:描述对象应具有的属性。它定义了对象的特定属性,并可在定义过程中设置自定义验证功能。
  2. rules:定义每个 schema 属性的验证规则。
  3. types:内置类型,比如 string、number 等等。在 schema 属性中定义。

下面是一个常见的 joi schema 的例子:

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

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

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

上面的代码定义了一个包含 username、password、email 和 birth_year 属性的对象 schema。其中,username 必须为包含字母数字、3-30 个字符的字符串;password 必须匹配特定的正则表达式;email 必须是一个电子邮件地址;而 birth_year 必须是一个介于 1900 年至 2013 年之间的整数。

除了设置每个属性的规则,您还可以对所有属性应共享的规则进行定义:例如,可采用 Joi.number().min(0) 规则来定义全局最小数字限制。

Joi 的使用方法

使用 joi 库来验证数据非常容易:通过使用 schema,检测用户输入、JSON 对象、配置、密码等等几乎任何类型的数据都是可行的。

以下是最基本的 joi 使用样例:

对于以上 code,当解析成功时,value 中包含验证过的值;反之,error 中包含相应的错误信息。error 对象通过 message 字段可以输出提示信息字符串。

除了通用的 validate 方法,joi 还具有以下常用方法:

  • validateAsync(value, [errback]):验证值,并异步地返回。
  • describe():返回 schema 及其所有关联规则的简运行信息,适用于测试和错误报告。
  • assert(value, [message]):验证值是否有效,若无效则抛出异常。
  • attempt(value, [message]):验证值是否有效,无效时抛出异常。
  • compile():将 schema 编译成一个可重复使用的对象,使 joi 可以更快速地执行同样的验证。

Joi 与 Hapi 的结合使用

joi 也可用于服务器上的请求和响应验证,尤其对于使用 Hapi 框架时更加有用。

可以使用 Hapi 的插件配置机制进行请求数据验证,Hapi 对 joi 集成得很好,需要做的只是简单地将 schema 配置在路由上,然后 Hapi 立即在收到请求时验证数据。

以下是一个简单的 Hapi 路由示例,使用上面定义的 schema 对数据进行验证:

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

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

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

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

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

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

-------

上方所示,通过将 Joi 校验对象直接配置在路由选项的 validate.payload 中,即可进行数据验证。客户端传递的请求数据与 payload 中的 schema 进行匹配的时候,若存在匹配失败的情况,即表明该请求无法通过 Hapi 框架路由,在这种情况下,Hapi 会给客户端自动设置 response,响应给客户端错误信息。

总结

joi 是一个强大的验证库,它提供简明易懂的 API、深层次的对象验证和内置的自定义验证函数。使用 Hapi 框架时,joi 相对于其他验证库也更适合进行请求和响应验证。

在实际项目中,除了上文所提到的功能,joi 还提供了更多特性,如 i18n 国际化支持等。

希望这篇文章对您学习并理解 Hapi 如何使用 joi 进行数据验证有所帮助。

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

纠错
反馈