Search code examples
node.jseventemitter

Emitting event in Node.js


I'm trying to teach myself both javascript and nodejs at the same time here and have not been able to get custom event emitting working. I am not receiving any errors, just not seeing the event being emitted. Is someone able to point out my (likely obvious) logical error?

I have a class declared in a separate module:

var util = require( 'util' ),
events = require( 'events' );


function logger(){
    var logpath, initialised, logstream;
    events.EventEmitter.call(this);
}
util.inherits(logger, events.EventEmitter);

logger.prototype.init = function(){
    this.emit( 'initialised' );
}

exports.logger = logger;

And then a main file:

var logger = require( "./logManager" ).logger;

var myLogger = new logger;

myLogger.init();

myLogger.on( 'initialised' ){
     console.log( "IT'S ALIVE!" );
}

Solution

  • First off, you have a syntax error in your main file. When you attach an event handler, that event handler is always a function, and the signature is on(eventName, eventHandler), so you need:

    myLogger.on('initialised', function() {
        console.log("IT'S ALIVE!");
    });
    

    Also, you have to attach the event handler before you call init, or you will miss the event, so in full:

    var logger = require( "./logManager" ).logger;
    
    var myLogger = new logger;
    
    myLogger.on('initialised', function() {
        console.log("IT'S ALIVE!");
    });
    
    myLogger.init();