前言
Node.js 是一个主流的服务器端开发语言,然而因为 Node.js 自身的单线程特性以及非阻塞 I/O 操作,导致应用程序极易崩溃并且难以被监测。而且,作为一个完整的应用程序,需要考虑的问题不仅仅限于写业务代码,还要考虑很多场景,比如异常处理、日志记录等等。Fastify 是一个 Node.js 的 Web 框架,它非常适用于构建高效和高性能的服务端应用程序。在本文中,我们将重点探讨如何使用 Fastify 实现异常处理和日志记录。
异常处理
异常处理不是任何一位开发者所关心的问题,甚至有时候都忽略了这个问题。但是,错误处理是应用程序开发中至关重要的一个环节,因为它可以使我们更加深入地了解应用程序的行为以及从错误中学习。特别是在生产环境中,一个没有恰当的异常处理的应用程序可能会产生无法预见的后果。以下是 Fastify 处理异常的技巧:
1. 对于未处理的异常,使用 Fastify 的 error handler 插件
Fastify 内置了一个称为 error handler 插件的插件(即 fastify-error-handling
)来处理未处理的异常。error handler 会处理已经冒泡到应用程序堆栈顶部的异常。如果未找到处理程序,则会将请求发送到 Fastify 的默认处理程序中(onError
包装函数),并在控制台中打印堆栈跟踪并返回错误的 JSON 表示。
示例如下:
-- -------------------- ---- ------- ----- ------- - -------------------- ---------------- ----- -------- --------- ------ - ----- --- ------------ --------- ---- ------- -- --------------------------------------------------- -------------------- ----- -- - -- ----- ------------------ ------------------- --------- -- ----------------------- --
当在浏览器中访问 http://localhost:3000
时,会得到以下响应:
{ "statusCode": 500, "error": "Internal Server Error", "message": "Oops! Something went wrong" }
2. 使用 try-catch 语句捕获异常
除了 error handler 插件之外,我们还可以使用传统的 try-catch 语句来捕获异常,并将它们记录到日志中。
示例如下:
-- -------------------- ---- ------- ----- ------- - -------------------- ---------------- ----- -------- --------- ------ - --- - -- ---- ---- ---- ----- ---- ----- --- ------------ --------- ---- ------- - ----- --- - ----------------- ------------------------ ----------- ---- ------ --------- ------ ------- -------- ------ --------- ---- ------ -- - -- -------------------- ----- -- - -- ----- ------------------ ------------------- --------- -- ----------------------- --
3. 自定义错误处理程序
除了使用 error handler 插件和 try-catch 语句之外,我们还可以自定义错误处理程序。使用 fastify.setErrorHandler()
方法可以在 Fastify 应用程序实例上注册自定义错误处理程序。
示例如下:
-- -------------------- ---- ------- ----- ------- - -------------------- ---------------- ----- -------- --------- ------ - ----- --- ------------ --------- ---- ------- -- -------------------------------- ------- -------- ------ - --------------------- ------------------------ ----------- ---- ------ --------- ------ ------- -------- ------ --------- ---- ------ -- -- -------------------- ----- -- - -- ----- ------------------ ------------------- --------- -- ----------------------- --
日志记录
日志是记录应用程序行为的最重要的手段之一。我们可以使用日志来了解应用程序中发生的事情,诊断问题以及跟踪错误。以下是 Fastify 如何记录日志的技巧:
1. 使用默认日志记录
Fastify 内置了一个简单的日志记录器,可以在应用程序的 handler
函数中使用 this.log
来记录日志。
示例如下:
-- -------------------- ---- ------- ----- ------- - -------------------- ---------------- ----- -------- --------- ------ - --------------------- -------- ------------------ -------- -- -------------------- ----- -- - -- ----- ------------------ ------------------- --------- -- ----------------------- --
如果我们在程序启动时将环境变量 NODE_ENV
的值设置为 production
,Fastify 将不会输出任何日志信息。
2. 使用 pino-pretty 美化日志
Fastify 使用的是 Pino 日志记录器,在控制台中输出的日志是单行的 JSON 数据。对于人类来说,并不太友好。但是,我们可以使用 pino-pretty
这个包来为日志增加漂亮的格式。
首先,我们需要安装 pino-pretty
:
npm install --save-dev pino-pretty
然后,我们需要在启动命令中设置环境变量 PINO_PRETTY=true
:
PINO_PRETTY=true node index.js
3. 将日志记录到文件或第三方服务
除了默认的日志记录器之外,我们还可以使用插件或自定义轮换策略来将日志记录到文件或第三方服务。
以下是使用 pino-pretty
将日志记录到文件(logs.log
)中的示例:
-- -------------------- ---- ------- ----- ------- - -------------------- ----- ---- - --------------- ----- ---------- - ---------------------- --------------------------------------------- ----------------------------------------- ------------------------------------------- ------------------------------------------------ - ------------ ----- ----------- ---------- -- ---------------- ----- -------- --------- ------ - --------------------- -------- ------------------ -------- -- -------------------- ----- -- - -- ----- ------------------ ------------------- --------- -- ----------------------- -- -- ------ --- ----- ----- -- ----- ----- ------ - -------- ----------------------------- -------------- -- - ----- --------------- - ------------ -- -------------------------------- - -------------------------- ----- -- - -- ----- -------------------------- -- - ----------------------- ------------- ----- -- - -- ----- -------------------------- -- ----------------------- ------------- ----- -- - -- ----- -------------------------- -- --------------------- ------------- ----- -- - -- ----- -------------------------- -- -- --------- -- -- ----- -- ------------
结论
在本文中,我们重点探讨了如何使用 Fastify 实现异常处理和日志记录的技巧。在应用程序开发中,这两个技能是至关重要的。错误的处理程序和不记录日志都可能会导致许多未知的问题。我们建议开发者们多加注意这方面的问题,使你的应用程序更加健壮,并为你的用户提供更好的用户体验。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6748d30d93696b026804f05b