(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 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • 关于运行错误,HALCON/C++默认打印错误信息并且终止程序。然而在某些应用中,放宽这个法则可能更有用。比如,如...
    厦门听涛阅读 1,117评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,838评论 25 709
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宫若石阅读 1,132评论 0 1
  • 重新开始做一件事情总是那么容易的,比如重新开始记录生活,重新开始卖手机,或者说重新创业。 在老家呆了快一个月了吧,...
    趣回购随心阅读 250评论 0 0