Hapi 框架异常处理和日志记录方法详解

Hapi框架是一款强大的 Node.js 后端开发框架,其凭借其灵活性、可扩展性和插件化支持等特点,使其成为在构建Web服务、API和其他Web应用程序时选择的首选框架之一。

在这篇文章中,我们将深入了解 Hapi框架中的异常处理和日志记录方法,包括如何捕获和处理异常,以及如何记录日志。同时,我们还将提供一些示例代码以及勘误记录,帮助你更好地理解这些概念。

异常处理

异常处理是编写健壮且可靠的代码的关键组成部分。在以下部分中,我们将讨论如何在 Hapi框架中处理异常。

  1. 自定义错误

在 Hapi框架中,你可以通过新建一个 Error 类来创建自定义错误。下面是一个示例:

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

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

在这里,我们创建了一个自定义错误类 CustomError,该类继承了 JavaScript 的 Error 类。我们指定了需要传递 messagestatus 参数,并且通过 super() 函数调用了 Error 构造函数。

CustomError 类中,我们还添加了一个 toJSON() 方法,以便将错误信息以 JSON 格式返回给调用者。这非常有用,因为可以按照自己的需要格式化和输出错误消息。

  1. 全局错误处理器

在 Hapi框架中,你可以使用 server.ext() 方法创建全局错误处理程序。下面是一个示例:

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

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

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

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

在这里,我们使用 server.ext() 方法注册了一个 onPreResponse 处理器,该处理器会在响应被发送回调用方之前触发。

我们检查了每个响应对象,如果响应对象是一个 Hapi的 Boom 错误对象,则通过 output.payloadcode 属性提取了有关错误的详细信息。我们使用 h.response() 方法创建一个 HTTP 响应,该响应包含携带错误信息的负载,并使用 response.code 发送 HTTP状态代码。

最后,通过返回 h.continue,我们确保继续执行要关闭的响应,而不中断流程。

  1. 路由级别的错误处理器

在 Hapi框架中,你可以使用 handler 函数中的 h 响应工具来处理路由特定的异常。下面是一个示例:

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

在这里,我们创建了一个 GET 路由,该路由执行时会抛出一个新的 JavaScript 错误。我们使用 try catch 块来捕获错误,并在 catch 块中使用 request.log() 方法记录错误日志。

最后,我们使用 h.response() 方法创建一个带有 "500 Internal Server Error" 状态代码的响应,并让调用者知道出现了错误。

日志记录

在服务端应用程序的开发中,日志记录是至关重要的,它可以帮助你从生产环境的事件和状态中推断出关键信息,以便分析和解决问题。以下部分将讨论在 Hapi 框架中使用日志处理器的方法。

  1. 默认的日志记录

在 Hapi框架中,默认情况下会自动启用日志记录,它可以以控制台记录符合标准输出格式的日志。此外,在调用 server.start() 之后,会在控制台中看到以下记录信息:

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

你还可以使用 server.logger 访问全局日志对象,该对象由 Hapi 框架管理。

  1. 用 request.log() 方法记录日志

在 Hapi框架中,你可以使用路由处理器函数中的 request.log() 方法来记录路由级别的日志。下面是一个示例:

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

在这里,我们创建了一个 GET 路由,该路由使用 request.log() 方法记录日志。log 方法需要传递一个数组参数,以便将日志条目分类。第一个参数是日志级别数组,此处我们打印了两个不同的日志级别 "info" 和 "error"。第二个参数是日志消息本身。

  1. 定义日志级别和记录器

在 Hapi框架中,日志记录器是从 "good" 插件继承而来的。这个插件提供了许多方便的配置选项,你可以配置日志级别、记录器和其他选项。

下面是一个示例:

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

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

在这里,我们以对象形式配置 options,并声明了一个 console 记录器。然后我们使用 good-squeeze 模块的 Squeeze 构造函数指定记录器选项。 { log: '*', response: '*', error: '*' } 意味着该记录器捕获所有日志级别、所有响应和错误日志消息。

最后,我们还使用了 good-console 模块中的 goodConsole 构造函数来创建一个记录器,并发送记录细节到标准输出。

结论

在 Hapi 框架中实现异常处理和日志记录方法要比预期复杂,但是会得到一个更灵活和可维护的 Web 应用程序。在编写和优化服务器端代码时,这两个关键组成部分都不容忽视。

希望这篇文章对你在 Hapi 应用程序中构建高质量异常处理程序和日志记录程序有所帮助。如果你发现本文有任何错误,欢迎在评论区留言。

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