Hapi 中如何使用 Hapi-Request-Validation 进行请求验证

阅读时长 6 分钟读完

Hapi 是一个流行的 Node.js Web 框架,它有着灵活的路由和插件系统,使得开发者可以快速地构建 Web 应用程序。在大型 Web 应用程序中,请求验证是一项不可或缺的安全措施。Hapi-Request-Validation 是 Hapi 插件之一,它提供了一个易于使用的方式来验证请求。在本文中,我们将学习如何在 Hapi 应用程序中使用 Hapi-Request-Validation 进行请求验证。

安装和配置 Hapi-Request-Validation

要使用 Hapi-Request-Validation,我们需要先安装它。可以使用 npm 快速安装:

安装完成之后,我们需要在 Hapi 应用程序中注册它。可以在应用程序的启动文件中添加以下代码:

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

-- ---

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

-- ---

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

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

  -- ---

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

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

-- ---

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

如上所示,我们向 server.register 方法传递了一个包含插件选项的对象。其中 plugin 属性指定了我们要注册的插件。

定义请求验证规则

我们现在已经安装和注册了 Hapi-Request-Validation 插件。接下来,我们需要定义一个请求验证规则。我们可以把验证规则定义在路由处理程序中,也可以定义在独立的文件中。在本文中,我们将在路由处理程序中定义它们。

下面是一个简单的示例,它验证了查询参数 name 的存在性,并且它不应为空。

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

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

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

如上所示,我们使用 Joi 来定义查询参数 name 的验证规则。Joi 是一个用于编写验证规则的库,它支持多种验证规则类型,例如字符串、数字、数组、对象等等。在此示例中,我们使用了 Joi.string() 来定义一个字符串类型的验证规则,并使用 Joi.required() 来定义一个必填选项。

我们将验证规则传递给了路由处理程序的 options 属性。这个属性包含了 Hapi-Request-Validation 的所有配置选项。在这个例子中,我们只配置了 query 中的验证规则,它验证了查询参数 name 的存在性和必填条件。

错误处理和自定义错误消息

Hapi-Request-Validation 插件会自动验证请求,并在发现错误时抛出验证错误。如果未能处理这个错误,会返回一个 400 错误响应。为了更好的用户体验和安全性,我们可以自定义错误消息并返回它们。Hapi-Request-Validation 提供了多种自定义错误消息的方式。

我们可以在定义验证规则时使用 Joi.messages() 方法来定义自定义错误消息。例如,以下代码将定义一个自定义错误消息,它会在 name 参数缺失时返回一个消息。在这个例子中,我们将错误消息定义为 Invalid request parameters

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

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

另一种自定义错误消息的方式是定义一个自定义错误处理程序。可以通过 optionsfailAction 属性来定义自定义错误处理程序。以下是一个自定义错误处理程序的示例:

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

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

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

如上所示,我们定义了一个自定义错误处理程序 onFail,它会在验证错误时抛出一个 Boom.badRequest 错误,该错误返回一个 400 响应。

结论

Hapi-Request-Validation 是一个易于使用的库,它提供了一种简单的方式来验证请求参数。在本文中,我们学习了如何在 Hapi 应用程序中使用 Hapi-Request-Validation 进行请求验证,并且展示了如何自定义错误消息和错误处理程序。当你构建 Web 应用程序时,请始终考虑到安全性,并使用 Hapi-Request-Validation 来验证请求数据。

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

纠错
反馈