使用 Hapi 和 Joi 进行表单验证的最佳实践

在前端开发中,表单验证是一个必不可少的部分,它能够保证用户提交的数据的合法性并提高系统的安全性。在本篇文章中,我们将介绍使用 Hapi 和 Joi 进行表单验证的最佳实践,包含详细的学习和指导意义以及实用的示例代码。

什么是 Hapi 和 Joi?

Hapi 是一款用于构建 RESTful Web 服务的 Node.js 框架,它提供了一系列强大且易于使用的功能,例如路由、中间件、插件等,使得构建 Web 服务变得非常简单和高效。而 Joi 则是 Hapi 的一个插件,用于数据验证。它支持对各种数据类型进行验证,包括字符串、数字、布尔值、日期、对象、数组等等。

安装和配置

首先,我们需要安装 Hapi 和 Joi,可以通过 npm 来完成:

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

接下来,在我们的项目中引入 Hapi 和 Joi:

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

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

创建路由

接下来,我们需要创建一个简单的路由用于演示表单验证。这里,我们定义了一个 Post 请求,用于向服务器提交表单数据。并且,我们也定义了一个 GET 请求,用于查询数据。

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

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

使用 Joi 进行表单验证

接下来,我们将使用 Joi 来验证表单数据的合法性。具体的实现方式为:在路由处理函数中定义一个 Joi 的 schema,并使用该 schema 对数据进行验证。如果验证通过,就继续执行业务逻辑,否则,返回错误信息。

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

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

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

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

在上面的代码中,我们使用 Joi.object().keys() 方法来定义一个 schema,其中包含三个字段:username、password、email。然后,我们使用该 schema 对 request.payload 进行验证。如果验证失败,就抛出错误,如果验证通过,就继续执行业务逻辑。这种方式非常简便易行,也可以让我们节省大量的时间和精力。

更好的错误处理

如果我们使用上面的方式,当验证失败时,会抛出一个错误,会导致服务器返回 500 错误码。这显然不是我们想要的结果。我们希望能够将错误信息返回给客户端,让客户端能够看到具体的错误信息。我们可以通过自定义错误处理程序来实现这一点:

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

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

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

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

在上面的代码中,我们使用 h.response() 方法来构建响应数据,然后使用 .code() 方法来设置状态码为 400(客户端错误)。这样,客户端就能够看到具体的错误信息了。

结论

使用 Hapi 和 Joi 进行表单验证是一种非常简便易行的方式,它能够帮助我们保证服务器数据的合法性,提高系统的安全性。我们可以通过定义 Joi 的 schema 和自定义错误处理程序来完成表单验证。最后,祝大家都能够掌握这个技巧,构建更加安全和健壮的 Web 服务。

示例代码

完整的示例代码如下:

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

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

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

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

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

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

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

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

--------

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6736fc3f317fbffedf073a6b