美文网首页
(3)错误处理

(3)错误处理

作者: plusman | 来源:发表于2015-06-10 00:49 被阅读56次

    原文地址: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

    相关文章

      网友评论

          本文标题:(3)错误处理

          本文链接:https://www.haomeiwen.com/subject/hwljqttx.html