Nodejs – Module (event)

Emitter (이벤트)

const EventEmitter = require('events'); 
const emitter = new EventEmitter();
const callback1 = (args)=> {
    console.log('first callback -', args);
};

emitter.on('dylan',callback1); // 이벤트 생성 > 'dylan' 발생시, 콜백함수 호출

emitter.on('dylan',(args)=>{
    console.log('second callback - ', args);
}); // 이벤트 생성 > 'dylan' 발생시, 콜백함수 호출

emitter.emit('dylan',{message:1}); // 이벤트 발생, 전달하고 싶은 데이터
emitter.emit('dylan',{message:2});
emitter.removeListener('dylan',callback1); // 이벤트 제거
// emitter.removeAllListeners(); // 모든 이벤트 제거
emitter.emit('dylan',{message:3});

Emitter로 로그 출력 구현

/* main.js */

const logger = require('./logger.js');
const emitter = new logger.Logger();

emitter.on('log',(event)=>{
    console.log(event);
}); 

emitter.log(()=>{
    console.log('...doing something');
});

/* logger.js */

const EventEmitter = require('events');

class Logger extends EventEmitter {
    log(callback){
        this.emit('log','started...');
        callback();
        this.emit('log','ended!');
    }
}
module.exports.Logger = Logger;

포인트 : 이벤트 emitter는 한번 객체를 만들면 그 객체 내에서 발생하는 이벤트에 한해서 이벤트를 들을 수 있다. 여러가지 이벤트 emitter 객체를 만들면 다른 객체에서 발생하는 이벤트는 다른 emitter에서 들을 수 없다.