Hapi框架是一款强大的 Node.js 后端开发框架,其凭借其灵活性、可扩展性和插件化支持等特点,使其成为在构建Web服务、API和其他Web应用程序时选择的首选框架之一。
在这篇文章中,我们将深入了解 Hapi框架中的异常处理和日志记录方法,包括如何捕获和处理异常,以及如何记录日志。同时,我们还将提供一些示例代码以及勘误记录,帮助你更好地理解这些概念。
异常处理
异常处理是编写健壮且可靠的代码的关键组成部分。在以下部分中,我们将讨论如何在 Hapi框架中处理异常。
- 自定义错误
在 Hapi框架中,你可以通过新建一个 Error 类来创建自定义错误。下面是一个示例:
----- ----------- ------- ----- - -------------------- ------- - --------------- ----------- - ------- --------- - ---------------------- -- ----- ----- ---- - -------- - ------ - ------ - ------- ------------ -------- ------------- ----- ---------- -- -- - -
在这里,我们创建了一个自定义错误类 CustomError
,该类继承了 JavaScript 的 Error
类。我们指定了需要传递 message
和 status
参数,并且通过 super()
函数调用了 Error
构造函数。
在 CustomError
类中,我们还添加了一个 toJSON()
方法,以便将错误信息以 JSON 格式返回给调用者。这非常有用,因为可以按照自己的需要格式化和输出错误消息。
- 全局错误处理器
在 Hapi框架中,你可以使用 server.ext()
方法创建全局错误处理程序。下面是一个示例:
--------------------------- --------- -- -- - ----- - -------- - - -------- -- --------- -- ---------------- - ----- ------- - ------------------------ ------ - ------------------ --------------------- - ------ ----------- ---
在这里,我们使用 server.ext()
方法注册了一个 onPreResponse
处理器,该处理器会在响应被发送回调用方之前触发。
我们检查了每个响应对象,如果响应对象是一个 Hapi的 Boom 错误对象,则通过 output.payload
和 code
属性提取了有关错误的详细信息。我们使用 h.response()
方法创建一个 HTTP 响应,该响应包含携带错误信息的负载,并使用 response.code
发送 HTTP状态代码。
最后,通过返回 h.continue
,我们确保继续执行要关闭的响应,而不中断流程。
- 路由级别的错误处理器
在 Hapi框架中,你可以使用 handler
函数中的 h
响应工具来处理路由特定的异常。下面是一个示例:
- ------- ------ ----- ---- -------- --------- -- -- - --- - ----- --- ------------ ----------- - ----- ----- - ---------------------- ----- ------ --------------------- ---- ------------------ - - -
在这里,我们创建了一个 GET 路由,该路由执行时会抛出一个新的 JavaScript 错误。我们使用 try catch
块来捕获错误,并在 catch
块中使用 request.log()
方法记录错误日志。
最后,我们使用 h.response()
方法创建一个带有 "500 Internal Server Error" 状态代码的响应,并让调用者知道出现了错误。
日志记录
在服务端应用程序的开发中,日志记录是至关重要的,它可以帮助你从生产环境的事件和状态中推断出关键信息,以便分析和解决问题。以下部分将讨论在 Hapi 框架中使用日志处理器的方法。
- 默认的日志记录
在 Hapi框架中,默认情况下会自动启用日志记录,它可以以控制台记录符合标准输出格式的日志。此外,在调用 server.start()
之后,会在控制台中看到以下记录信息:
----------------- ----------------------------------------------------------------
你还可以使用 server.logger
访问全局日志对象,该对象由 Hapi 框架管理。
- 用 request.log() 方法记录日志
在 Hapi框架中,你可以使用路由处理器函数中的 request.log()
方法来记录路由级别的日志。下面是一个示例:
- ------- ------ ----- ---- -------- --------- -- -- - --------------------- ----- ---------- ---------------------- ------ ---------- ------ ------ ------- - -
在这里,我们创建了一个 GET 路由,该路由使用 request.log()
方法记录日志。log
方法需要传递一个数组参数,以便将日志条目分类。第一个参数是日志级别数组,此处我们打印了两个不同的日志级别 "info" 和 "error"。第二个参数是日志消息本身。
- 定义日志级别和记录器
在 Hapi框架中,日志记录器是从 "good" 插件继承而来的。这个插件提供了许多方便的配置选项,你可以配置日志级别、记录器和其他选项。
下面是一个示例:
----- -------- ---------------- - ----- ----------------- - ------- ---------------- -------- - ---------- - -------- - - ------- --------------- ----- ---------- ----- -- ---- ---- --------- ---- ------ --- --- -- - ------- --------------- -- --------- -- -- -- -- --- - -------------- - - -------- --
在这里,我们以对象形式配置 options
,并声明了一个 console
记录器。然后我们使用 good-squeeze
模块的 Squeeze
构造函数指定记录器选项。 { log: '*', response: '*', error: '*' }
意味着该记录器捕获所有日志级别、所有响应和错误日志消息。
最后,我们还使用了 good-console
模块中的 goodConsole
构造函数来创建一个记录器,并发送记录细节到标准输出。
结论
在 Hapi 框架中实现异常处理和日志记录方法要比预期复杂,但是会得到一个更灵活和可维护的 Web 应用程序。在编写和优化服务器端代码时,这两个关键组成部分都不容忽视。
希望这篇文章对你在 Hapi 应用程序中构建高质量异常处理程序和日志记录程序有所帮助。如果你发现本文有任何错误,欢迎在评论区留言。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67358a9e0bc820c5824f02bc