全栈项目|小书架|服务器开发-Koa2 全局异常处理
什么是异常#
做开发的基本都知道异常
,像Android
开发中常见的ANR
异常、空指针
异常,服务器开发中经常遇到的异常404,500
异常,还有一些其他常见的异常,具体可见HTTP状态码。
基本上这些异常可以总结为:已知异常
和未知异常
。
已知异常就是程序中能够预想到异常,比如:服务器接口开发中某个api
接口需要5
个参数,而用户传递的参数多余5个
或者少于5个
,这种错误就是已知错误。
未知异常就说程序中不能预想到的异常,比如:服务器接口开发中遇到了空指针而程序中又没有做相应处理就会抛出HTTP
状态码为500
的这种异常,这种就说未知异常。
为什么需要全局异常处理#
当遇到异常时如果没有全局异常处理,一般是在相应的代码逻辑中添加异常捕捉(try ... catch)
或者抛出(throw)
处理。
这么做其实是有弊端的:
- 程序代码判断逻辑过长,可读性查,不方便后期维护。
- 代码耦合性高,每次出现异常都需要在不同的
类、文件
下写异常判断逻辑。
以上只是列举的几个弊端,为了解决以上的问题程序中添加全局异常的处理就很有必要了。
这里使用的是NodeJS+Koa2
开发。在Koa
中,中间件是无处不在,所以这里全局异常的处理也是通过中间件的方式去实现。
如何处理#
1、明确是否需要抛出异常
在服务器接口开发中需要明确是生产环境
还是开发环境
。
在生产环境
中如果出现异常需要将详细的异常信息上报同时将异常状态通过api
返回给客户端处理
在开发环境
中如果出现异常则需要将详细的异常信息在开发工具的控制台显示,同时返回将异常状态通过api
返回给客户端处理。
这里的区别就说生产环境
和开发环境
,所以通过定义一个全局变量去判断即可。由于程序中全局变量可能不止一个,为了统一声明全局变量,我们将所有的全局变量放在一个文件中,统一去加载。
新建一个