自定义错误 - 985ch/egg-sachikawa GitHub Wiki
在一些简单的项目开发中,开发者通常并不在乎错误的类型,抛出错误全都使用throw new Error('xxx')来完成。这样固然方便,但是当开发者希望通过try...catch来处理错误的时候就很麻烦了。因此,我们建议在所有项目中,都尽量避免抛出一个没有任何特征的Error。而是自定义错误类之后再抛出。
自定义错误的使用方法
- 定义一个名叫MyError的错误,这个错误可以传入具体错误数据data
const { CustomError } = require('egg-sachikawa').Utils;
class MyError extends CustomError {
constructor(msg, data) {
super(msg);
this.data = { msg, data };
}
};
exports.MyError = MyError;
- 抛出错误MyError
throw new MyError('错误信息', data)
- 处理错误的时候,根据错误名称来对其进行处理
try {
// do something
} catch(e) {
if (e.name === 'MyError') {
// do something
} else {
throw e;
}
};
注意事项
尽管在不少场合利用抛出错误可以实现很多便捷的功能,但是不要那样做。滥用错误抛出机制会破坏业务流程让代码维护变得困难,请正确的使用自定义错误功能。