не может создать экземпляр экспортированного пользовательского модуля Nodejs, который расширяет EventEmitter

сообщество. Я не могу создать экземпляр экспортированного пользовательского модуля Nodejs.

У меня есть 2 файла: один пользовательский тестовый модуль "resource.js" и "ext-emitter.js"

в resource.js создайте класс Resource и расширьте его из класса EventEmitter.

    // resource.js
    var util = require("util");
    var eventEmitterInstance = require("events").EventEmitter;


function Resource(m){
    this.maxEvents = m;
    var self = this;

    process.nextTick(function() {
       var count = 0;
       self.emit('start');
       var t = setInterval(function(){
          self.emit('data', ++count);
          if (count === m) {
              self.emit('end', count);
              clearInterval(t);
          }

       }, 10);
    });

}

util.inherits(Resource, eventEmitterInstance);
module.exports = Resource();

Затем я импортирую модуль выше в следующий файл ext-emitter.js. Я пытаюсь создать экземпляр расширенного пользовательского модуля Resource() (который, в свою очередь, расширяет класс EventEmitter), но я получаю сообщение об ошибке: «Ресурс не определен»

Пожалуйста, помогите мне найти место, где я ошибся.

var r = require("./resource");

var r = new Resource(7);

r.on('start', function(){
    console.log("I've started the resource getting process!!!");
});

r.on('data', function(d) {
    console.log("I received this data --> " + d );
});

r.on('end', function(finalCountOfRes){
   console.log("I have finished resource getting. The num of res gotten: " + finalCountOfRes); 
});

person JavaJedi    schedule 06.06.2015    source источник


Ответы (1)


Я думаю, что место, где вы ошиблись, была первая строка в файле «ext-emitter.js». Просто будьте более осторожны, вы могли сами заметить ошибку: здесь вам нужен ваш собственный модуль «resource.js» и поместите его в переменная «r», затем вы создаете экземпляр нового экземпляра импортированного модуля с той же переменной «r» и вызываете новый для неизвестного/неопределенного в объекте Resource() ext-emitter.js.

var r = require("./resource");
var r = new Resource(7);

Просто следите за именами переменных. Измените первую строку на:

var Resource = require("./resource");

И это будет работать нормально.

person musichen    schedule 06.06.2015
comment
хорошо, неопределенная ошибка исчезла. Теперь при запуске он говорит: /home/ubuntu/workspace/node.js/ext-emitter.js:3 var r = new Resource(7); ^ TypeError: undefined не является функцией - person JavaJedi; 06.06.2015
comment
во втором файле resource.js последнюю строку при экспорте избавьте от лишних скобок, например так: module.exports = Resource; - person musichen; 06.06.2015