节点JS未处理的错误事件

时间:2015-01-15 17:03:44

标签: javascript node.js events

我是新手,我正在尝试编写代码,其中使用了节点的事件发射器,请参阅下面的代码,

var EventEmitter = require('events').EventEmitter;
var errors = require('./errors');

var defaults ={
    default_api_endpoint_v0 : "someapi",
    oauth_c_key: "oauth_consumer_key",
    options_check: ['oauth_consumer_key']
};

var someapi = function(options){
    this.options = options;
    EventEmitter.call(this);
    if(!this.options)
        this.emit('error',errors.options_not_passed);
        return;
        //return errors.options_not_passed
    if(!this.checkOptions()){
        return errors.options_passed_not_satisfied
    }

};

someapi.prototype = Object.create(EventEmitter.prototype);

someapi.prototype.checkOptions = function(){
    var thatOptions = this.options;
    var bool = false;
    if(typeof thatOptions !== 'object')
      return errors.options_passed_not_satisfied;
    Object.keys(thatOptions).forEach(function(key){
        Object.keys(defaults.options_check).forEach(function(Key){
            if(key === defaults.options_check[Key]){
                bool = true;
            }
        })
    });
    return bool;
};

module.exports = someapi

我正在调用它,如下所示,

var op = new someapi();

op.on('error',function(err){
    console.log("Emitted" + err);
})

但它抛出了这个错误,我不知道我做错了什么,

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: Please pass the options                                      
    at Object.<anonymous> (d:\gitHub\someapi\lib\errors.js:2:26)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (d:\gitHub\someapi\lib\api.js:2:14)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)

在上面的错误中,请通过我返回的选项,它位于错误文件中,见下文,

module.exports = {
    options_not_passed : new Error("Please pass the options"),
    options_passed_not_satisfied : "Please check are you sending all the options_params"
};

可能有人,给我一些输入,我在这里做错了吗?

对于上面的内容,我知道在为someapi类创建对象时我没有传递选项对象。我想知道为什么我的错误没有在&#34; on&#34;事件

P.S提前致谢。

1 个答案:

答案 0 :(得分:1)

原因是您从构造函数发出错误。在创建实例的时候无法连接侦听器(或对对象执行任何其他操作)(因为您没有对从中返回的新对象的引用) new someapi()。)