Hapi.js 中如何优雅地处理错误

阅读时长 6 分钟读完

在前端开发中,错误处理是不可避免的一个重要部分。Hapi.js 是一个流行的 Node.js web 框架,它提供了许多内置的错误处理机制,以帮助开发者轻松处理错误并提高代码质量。在本文中,我们将探讨如何在 Hapi.js 中优雅地处理错误。

错误处理的重要性

在编写 web 应用程序时,错误可能会随时发生。这些错误可能是因为用户输入了无效的数据,或者后端服务器出现了问题等。良好的错误处理可以帮助我们更好地管理这些错误,不会表现为简单的 500404 错误页面。正确的错误处理可以提高用户体验,并帮助我们更好地理解应用程序运行状况。

Hapi.js 中的错误处理

Hapi.js 通过使用 Boom 这个库来处理错误。 Boom 使用可读性强的错误对象来表示错误信息,从而让错误信息更加有意义,并且更容易处理。此外, Hapi.js 还提供了很多其他的工具函数,例如 reply() 方法,可以帮助我们处理错误并返回给客户端有用的错误信息。

throw Boom

使用 Boom 提供的 badRequest()notFound() 等方法来构建错误对象,并将这个错误对象通过 throw 抛出:

可以把这种方式和 try {} catch {} 语句结合使用来捕获这些错误并进行处理:

特定错误插件

Hapi.js 还提供了许多特定的错误插件(error plugins),可以自动处理一些常见的错误。例如,hapi-auth-jwt2 插件提供了一组默认错误,用于处理身份验证和授权错误:

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

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

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

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

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

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

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

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

在本例中,当请求的资源未发现时,会自动抛出由 Boom.notFound('Invalid') 构建的错误对象。

自定义错误插件

如果我们需要更加专业化的错误处理,可以通过自定义插件来实现。插件是 Hapi.js 架构中非常重要的一部分,可以扩展服务器的功能,包括处理错误。以下是一个自定义的错误插件,用于处理身份验证和授权错误:

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

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

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

将自定义错误插件注册到 Hapi.js 中:

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

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

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

在本例中,当请求发生 UnauthorizedError 时,会自动抛出 Boom.unauthorized('Invalid token') 构建的错误对象,其他未知的错误都会抛出 Boom.badImplementation('UnknownError') 构建的错误对象。

总结

错误处理是 Hapi.js 开发中必不可少的一部分,使用 Boom 库和错误插件可以帮助我们优雅地处理错误,并提高应用程序的代码质量。在处理错误时,我们可以结合 try {} catch {} 语句捕获错误,并通过 reply() 方法发送错误信息给客户端。另外,我们可以使用自定义错误插件来处理非常专业化的错误。信任 Boom 处理错误可以让我们更加自信地开发应用程序,更好地服务用户。

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

纠错
反馈