Node.js

Node.js 実践講座 〜基礎編〜 その5

More than 1 year has passed since last update.

はじめに

この記事では、標準ライブラリの使用方法の解説の一部をご紹介します。今回はEventEmitterを使用したサンプルプログラムを作成します。

ワークスペースの作成

下記コマンドでプログラムを格納するディレクトリを新たに作成します。

mkdir workspace/js/basic/02-standard-library/04-events
touch workspace/js/basic/02-standard-library/04-events/index.js

cd workspace/js/basic/02-standard-library/04-events

リスナーを登録しない場合

ソースコード

ソースコードの内容を下記に示します。

index.js
'use strict';

var events = require('events')

var eventEmitter = new events.EventEmitter()

console.log('1. emit `click` event:')
eventEmitter.emit('click')

console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')

console.log('3. end')

実行コマンド

実行コマンドを下記に示します。

node index.js

実行結果

実行結果を下記に示します。

1. emit `click` event:
2. emit `dblclick` event:
3. end

解説

EventEmitterのオブジェクトを作成するにはnew events.EventEmitter()を記述します。EventEmitteremitメソッドはイベントを発行するためのメソッドで、第1引数にはイベント名が指定されます。なお、第2引数以降は後ほど解説するリスナーの引数になります。

リスナーを登録する場合

ソースコード

ソースコードの内容を下記に示します。

index.js
'use strict';

var events = require('events')

var eventEmitter = new events.EventEmitter()

eventEmitter.on('click', function () {
  console.log('click!')
})

console.log('1. emit `click` event:')
eventEmitter.emit('click')

console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')

console.log('3. end')

実行コマンド

実行コマンドを下記に示します。

node index.js

実行結果

実行結果を下記に示します。

1. emit `click` event:
click!
2. emit `dblclick` event:
3. end

解説

今回はclickイベントに対してリスナーを登録したので、実行結果にclick!と表示されるようになりました。リスナーは関数だと思って差し支えないかと考えます。リスナーを登録するにはEventEmitterオブジェクトのonメソッドを使用します。

異なるイベントに複数のリスナーを登録する場合

ソースコード

ソースコードの内容を下記に示します。

index.js
'use strict';

var events = require('events')

var eventEmitter = new events.EventEmitter()

eventEmitter.on('click', function () {
  console.log('click!')
})

eventEmitter.on('dblclick', function () {
  console.log('double click!')
})

console.log('1. emit `click` event:')
eventEmitter.emit('click')

console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')

console.log('3. end')

実行コマンド

実行コマンドを下記に示します。

node index.js

実行結果

実行結果を下記に示します。

1. emit `click` event:
click!
2. emit `dblclick` event:
double click!
3. end

解説

EventEmitterオブジェクトのonメソッドの第1引数として、異なるイベント名を指定することで、異なるイベントに対して、それぞれリスナーを登録することが可能です。

同じイベントに複数のリスナーを登録する場合

ソースコード

ソースコードの内容を下記に示します。

index.js
'use strict';

var events = require('events')

var eventEmitter = new events.EventEmitter()

eventEmitter.on('click', function () {
  console.log('click!')
})

eventEmitter.on('dblclick', function () {
  console.log('double click!')
})

eventEmitter.on('click', function () {
  console.log('click!!!!!')
})

console.log('1. emit `click` event:')
eventEmitter.emit('click')

console.log('2. emit `dblclick` event:')
eventEmitter.emit('dblclick')

console.log('3. end')

実行コマンド

実行コマンドを下記に示します。

node index.js

実行結果

実行結果を下記に示します。

1. emit `click` event:
click!
click!!!!!
2. emit `dblclick` event:
double click!
3. end

解説

同じイベントに対して複数のイベントを登録するにはEventEmitteronメソッドをその数だけ呼び出します。emitメソッドでイベントを発行する際、登録されている全てのリスナーに対してイベントが通知されます。

おわりに

次回は、Node.jsのモジュールの使用方法を学ぶためのサンプルプログラムを作成します。