原文地址:https://zybuluo.com/plusman/note/114470
参考资料:
NodeJS 错误处理最佳实践
Node.js下自定义错误类型
程序员的失误不在错误处理范围内,应该debug掉。
可预见错误的处理
可接受错误
使用callback,不会使程序崩溃,err 和 data 二者有其一个
'use strict'
function doSomething(callback){
if('错误发生')
return callback(new Error('error'));
callback(null,data);
}
调用函数参数漏填
程序员的人为Bug,直接抛出异常,方便及时修正。
return throw new Error('参数不完整');
不可预见错误的处理
try/catch
try/catch 唯一常用的是在 JSON.parse 和类似验证用户输入的地方。
自定义错误类型 (继承Error)
结合 [MDN Error][4] 章节,补充了遗漏的 stack 信息,并添加code(错误码)属性,方法兼容浏览器和node,示例如下。
'use strict'
/**
* 自定义错误类型,继承来自Error对象
* @param {string} message 错误消息体
* @param {number} code 错误码
*
* edit by plusmancn@gmail.com wechat@plusman
*/
function MyError(message,code) {
this.code = code || 1;
this.message = message || 'MyError';
this.stack = Error().stack;
}
MyError.prototype = Object.create(Error.prototype);
MyError.prototype.name = "MyError";
try{
throw new MyError('MyError',1001);
}catch(ex){
console.log(ex instanceof Error); //true
console.log(ex instanceof MyError); // true;
console.log(ex instanceof RangeError); // false
}
项目实际应用中,可以把所有错误定义放进一个 errorCode.json 文件,通过
new MyError(errorCode['1001'],1001);
进行错误抛出,错误定义的集中,有利于文档的生成。
系统常见错误抛出
名称 | 定义 |
---|---|
ENOENT | Error No Entity 所操作的对象不存在 |
ENOMEM | Error No Memory 内存不足 |
[4org/topic/52090bc944e76d216af25f6f
3: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error
网友评论