Templates by BIGtheme NET

Node.js Events and Listeners

In this article, I will give you Introduction to Node.js Events.
Node.js Event life Cycle. What is the role of EventEmitter class in Node.js.
How to create our own events. How to get Pizza with Node.js with chain events
order, prepare, ready, delivery and eat. How to create our own the listeners.
How to add and remove listeners to particular events.

Introduction to Node.js Events :

In any web applications, The DOM triggers the events in browser.
You can write a code to listen those events.

Some examples of the DOM events are like click, submit, change value and so on.

Given is simple JQuery code to validate the form on submit event.

$("Submit").on("click", function{ ... code that handle click event ...});

This JQuery, code attach the function to the DOM object for
that particular click event on Submit button.

Like DOM, many objects in Node also emit events.

All these events are inherited from EventEmitter class and
this EventEmitter class is inherited from net.Server class.

EventEmitter class is the super class of all the events.

events1

Syntax to Create or access the EventEmitter class is,

var eventEmitter = require('events').EventEmitter; 
or
var eventEmitterObj = new EventEmitter();

Syntax to use these events,

emitter.on('<<name_of_the_event>>', function() {
	// do something, when event occurred (Event listener code)
});
emitter.emit('<<name_of_the_event>>');

Here is a simple example of ‘abc’ event,
This will be called, when you run the node program.

var events = require('events');
var emitter = new events.EventEmitter();

emitter.on('abc', function() {
	console.log('Hello World events example!');
});
emitter.emit('abc'); // This will call the event abc

Right click and Run As -> Node Application. This prints
“Hello World events example!” on console.

Out Put :

Hello World events example!

How to get Pizza with Node.js chain events :

In this example, I will show you how to call chain of events.

In Pizza making, there are 5 events.

1) order – order is placed by customer, with all his specifications.

2) prepare – start preparing by …

3) ready – Pizza is ready for delivery.

4) deliver – delivered to customer.

5) eat – customer is eating

events

Simple steps to following are,

1) Creating emitter class object.

2) Create all 5 listeners for events order, prepare, ready, delivery and eat.

3) Register all these 5 events to corresponding listener.

4) emit the first event using emit() method of emitter class.

Complete source code of eventsChain.js is Here,

eventsChain.js

/**
 * This is simple example, that helps to understand How 
 * to deal with multiple chain events.
 * Pizza request:
 * order - prepare - ready - deliver - eat and enjoy.
 */
var events = require('events');
var emitter = new events.EventEmitter();

var order = function order(){
	console.log('Pizza order is placed by Customer!!!!\n');
	emitter.emit('prepare');
};

var prepare = function prepare(){
	console.log('Preparing Pizza !!!!\n');
	emitter.emit('ready');
};

var ready = function ready(){
	console.log('Pizza is ready for delivery !!!!\n');
	emitter.emit('deliver');
};

var deliver = function deliver(){
	console.log('Pizza is delivered to Customer!!!!\n');
	emitter.emit('eat');
};

var eat = function eat(){
	console.log('Customer is Eating the Piza !!!!');
};

emitter.on('order', order );

emitter.on('prepare', prepare );

emitter.on('ready', ready );

emitter.on('deliver', deliver );

emitter.on('eat', eat );

emitter.emit('order');

Select and Run As -> Node Application,

Out Put :

Pizza order is placed by Customer!!!!

Preparing Pizza !!!!

Pizza is ready for delivery !!!!

Pizza is delivered to Customer!!!!

Customer is Eating the Piza !!!!

How to work with Node.js Event Listeners :

We can add multiple event listeners to single event by use addListener() method in events.EventEmitter class.
and remove multiple event listeners from a single event by use removeListener() method in events.EventEmitter class.

Syntax is,

emitter.addListener(event, listener); // This is to add listener
emitter.removeListener(event, listener); // This is to remove listener

Main event is, GetPizza all other events order, prepare, ready, deliver and eat
are sub events to the main event GetPizza .

So I added all these sub events listeners to the main event listener.

emitter.addListener('GetPizza', order );
emitter.addListener('GetPizza', prepare );
emitter.addListener('GetPizza', ready );
emitter.addListener('GetPizza', deliver );
emitter.addListener('GetPizza', eat );

Suppose it is ready made pizza and take away.
Then prepare and deliver events are not required.

So we should remove the prepare and deliver event listeners from main listener GetPizza.

emitter.removeListener('GetPizza', prepare );
emitter.removeListener('GetPizza', deliver );

Complete source code for event listeners is Here,

eventListeners.js

/**
 * This is simple example, that helps to understand How to deal with multiple
 * chain events listeners. Pizza request: order - prepare - ready - deliver -
 * eat and enjoy.
 */
var events = require('events');
var emitter = new events.EventEmitter();

var order = function order() {
	console.log('Pizza order is placed by Customer!!!!\n');
};

var prepare = function prepare() {
	console.log('Preparing Pizza !!!!\n');
};

var ready = function ready() {
	console.log('Pizza is ready for delivery !!!!\n');
};

var deliver = function deliver() {
	console.log('Pizza is delivered to Customer!!!!\n');
};

var eat = function eat() {
	console.log('Customer is Eating the Piza !!!!');
};

emitter.addListener('GetPizza', order);

emitter.addListener('GetPizza', prepare);

emitter.addListener('GetPizza', ready);

emitter.addListener('GetPizza', deliver);

emitter.addListener('GetPizza', eat);

emitter.emit('GetPizza');

/**
 * This is a ready made and take away Pizza, then prepare and deliver events are
 * not required. So remove these two events listeners from main event listener
 * GetPizza.
 */
console.log('\n\nRemove prepare and deliver listeners !!!!');
console.log('=========================================');

emitter.removeListener('GetPizza', prepare);
emitter.removeListener('GetPizza', deliver);

emitter.emit('GetPizza');

Select Run As -> Node Application,

Out Put :

Pizza order is placed by Customer!!!!

Preparing Pizza !!!!

Pizza is ready for delivery !!!!

Pizza is delivered to Customer!!!!

Customer is Eating the Piza !!!!


Remove prepare and deliver listeners !!!!
=========================================
Pizza order is placed by Customer!!!!

Pizza is ready for delivery !!!!

Customer is Eating the Piza !!!!

You can download complete project,
Here eventsAndListenersExample

*** Venkat – Happy leaning ****