前言
在开发过程中,异常处理是必不可少的一部分。Node.js 中通过 try/catch
可以捕获异常并处理,但摆在我们面前的问题是:每个路由、控制器、服务等的异常处理代码都是独立的,且代码重复率极高,相互间也不便于统一管理。因此,我们需要寻找一种统一的、可重用的异常处理方案。
而这时,sails 框架的 npm 包 sails-hook-exception-handling 就应运而生。
本文将详细介绍 sails-hook-exception-handling 的使用方法,并利用示例代码进行演示。
sails-hook-exception-handling 简介
sails-hook-exception-handling 是 sails 的一个钩子(hook),它可以在 sails 应用中集成通用的异常处理逻辑。该钩子会在 sails 启动时自动注册全局错误处理中间件(middleware),捕获来自请求/响应的异常并进行统一的处理。
sails-hook-exception-handling 的特点如下:
- 集成到 sails 框架中,轻松使用。
- 可以自定义异常处理方法,方便扩展和定制。
- 支持捕获包括 4xx 和 5xx 级别的异常,并返回统一格式的错误响应。
安装与配置
安装 sails-hook-exception-handling 非常简单,只需要执行以下命令即可:
npm install sails-hook-exception-handling
安装完成之后,在 sails 的 config/http.js
中添加如下配置:
-- -------------------- ---- ------- ------------------- - - ----------- - ------ - -- -------- --------------------- -- -------- -- ------------------- ------------------------------------------------------------------------ ------------------------ ----- ---- ---- ----- -- - -- ----------------------- - --- -- --
这里简单介绍一下配置项:
order
:中间件的执行顺序。因为全局错误处理中间件需要放在最后执行,所以将其放在最后。globalErrorHandler
:引入 sails-hook-exception-handling 包导出的全局错误处理中间件,并进行初始化配置。customExceptionHandling
:自定义的异常处理方法,在这里可以编写自己的异常处理逻辑。
除了支持自定义异常处理方法外,sails-hook-exception-handling 还内置了默认的异常处理方法,如下所示:
{ '400': badRequest, '401': unauthorized, '402': paymentRequired, '403': forbidden, '404': notFound, '500': error }
badRequest
、unauthorized
等等都是内置的方法,会根据传入的异常类型进行基础异常处理并返回相应的错误响应。如果没有自定义异常处理方法,sails-hook-exception-handling 将使用这些内置方法进行默认处理。
使用示例
在上面的配置完成之后,就可以开始使用 sails-hook-exception-handling 了。为了演示方便,这里以一个简单的接口为例,介绍全局错误处理的使用方法。
首先,在 api/controllers
目录下新建 test.js
文件,编写如下代码:
module.exports = async function (req, res) { throw new Error('test error'); };
该接口仅仅抛出一个错误,因为我们想要在全局错误处理中间件里统一处理异常。接下来,在浏览器或者 postman 中访问 http://localhost:1337/test
即可看到异常的详细错误信息。
异常信息非常详细,但是却不符合我们的 API 规范,因此需要封装一下错误响应格式。接下来,我们就可以通过自定义异常处理方法实现这个需求了。
在 config/http.js
中的 globalErrorHandler
配置项下添加自定义异常处理方法:
-- -------------------- ---- ------- ------------------- - - ----------- - ------------------- ------------------------------------------------------------------------ ------------------------ ----- ---- ---- ----- -- - ----- ---------- - -------------- -- ---- ----- ------ - ----------- -- ------- ------- ----------------------------- -------- ------- ----- ----------- --- - -- - --
这个方法简单地对错误信息进行封装并返回一个统一格式的错误响应,具体如下:
{ "message": "test error", "code": 500 }
访问 http://localhost:1337/test
将得到上面这个统一格式的错误响应,符合我们的预期。
总结
sails-hook-exception-handling 钩子为我们在 sails 应用中处理异常提供了一个可靠、可重用的解决方案。在本文中,我们介绍了 sails-hook-exception-handling 的基础使用方法,并分享了一些自定义异常处理方法的开发思路。
在实际开发中,异常处理十分重要,在使用 sails 开发应用时,可以选择集成 sails-hook-exception-handling 达到优化异常处理过程的目的。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600668f2d9381d61a3540dc6