(3)错误处理


原文地址: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 [email protected]  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

你可能感兴趣的:((3)错误处理)