Fastify 是一个高效、低开销的 Node.js web 框架。在处理 web 请求的过程中,不可避免地会发生错误。如何优雅地处理错误对于应用程序的稳定性至关重要。接下来我们将介绍在 Fastify 中如何处理错误,以便更好地利用 Fastify 的优势。
捕获错误
在 Fastify 中捕获错误有两种方式:通过 try/catch
或使用 Fastify 错误处理器。使用 try/catch
是一种更直接的方式,可以在路由处理函数中添加:
--------------------- ----- --------- ------ -- - --- - ----- --- --------------- - ----- ----- - ---------------------------- - ---
当错误被抛出并且被捕获时,状态码被设置为 500,响应内容是错误信息。为了实现更优雅的错误处理,我们可以使用 Fastify 的错误处理器。
错误处理器
Fastify 错误处理器允许我们在一处统一处理所有路由中的错误。在我们的应用程序中注册错误处理器:
----------------------------- ------- -------- ------ -- - --------------------------- ----- ---------- ----------------------- ------------------ --------------- ------- -------- --------- ------ ------ --- ---
这个错误处理器将在所有路由中的错误中调用。回调函数接受三个参数:错误对象 error
,请求对象 request
,以及响应对象 reply
。
注意:这个错误处理器只能处理使用 next
函数抛出的错误,throw
抛出的错误需要在路由处理函数中 try/catch
捕获。
接下来,我们可以将我们的路由处理函数简化:
--------------------- ----- --------- ------ -- - ----- --- --------------- ---
next
函数会抛出一个错误,错误处理器会捕获错误并给出响应。这保证了任何路由中的错误都会由错误处理器处理。
错误日志记录
在生产环境中日志记录是必须的,为了更好地跟踪错误发生的位置。Fastify 的错误处理器提供了一个简单的方法来记录错误,我们可以在错误处理器中添加一条 log:
----------------------------- ------- -------- ------ -- - --------------------- ---------------------- ----------------- -------------- - ----------------- ----- ---------- ----------------------- ------------------ --------------- ------- -------- --------- ------ ------ --- ---
这将记录每个错误的请求信息和错误栈。
自定义错误
处理错误不仅仅是返回错误信息和错误码。有时候,我们需要在响应体中包含更多信息,比如一些自定义错误码或者错误提示。Fastify 允许我们自定义错误并在错误处理器中使用。为了实现这个需求,我们需要继承标准的 JavaScript 错误类:
----- ----------- ------- ----- - -------------------- ----------- - --------------- --------------- - ----------- - -
我们创建了一个继承 Error
的类 CustomError
,并添加了 statusCode
属性。
接下来我们可以使用这个类创建自定义的错误:
---------------------------- ----- --------- ------ -- - ----- --- - --- ------------------ --------- ---- ------- ----- ----- ---- ---
此时,在错误处理器中使用:
----------------------------- ------- -------- ------ -- - --------------------- ---------------------- ----------------- -------------- - ----------------- ----- ---------------------- -- ---- ----------------------- ------------------ --------------- ------- -------- ------------- --- ---
现在,在错误处理器返回的响应体中,我们的自定义 statusCode
和错误信息都被包含了进去。
结论
在 Fastify 中优雅地处理错误非常简单。我们可以使用 try/catch
或使用错误处理器来捕获错误,为了更好地跟踪错误,在错误处理器中添加日志记录,使用自定义错误来返回更明确的响应。利用这些技巧,我们可以为我们的应用程序提供一个健壮的错误处理机制。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672047992e7021665e017cb2