const http = require('http')
const server = http.createServer();
server.on('request', (reqeust, response) => {
})
오늘 살펴볼 건, server 뒤에 따라오는 on! 입니다.
구글에 검색하면 on은 이벤트고 EventsEmiiter 어쩌구 하는데 이게 어떤식으로 적용되는지 몰랐습니다. 정답을 말하고 시작하자면 EventsEmitter에서 상속을 해서 server객체가 이 이벤트를 사용 할 수 있는 겁니다.
http 트랜잭션을 이해하기 위해 EventsEmiiter가 필요하다고하니 이벤트에 대해서 한번 알아보겠습니다.
EventEmitters
는 Node.js에 내장되어있는 옵저버 패턴 구현입니다.
객체의 상태 변화를 관찰하는 관찰자, 옵저버들의 목록을 개체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴
function Emitter() {
this.events = {} // this.events 라는 객체를 초기화
}
Emitter.prototype.on = function (type, listener) { // 프로토 타입에 on이라는 함수추가
this.events[type] = this.events[type] || [] // 타입
this.events[type].push(listener); // 리스너를 인자로 받아서, Emitter 객체에 추가
}
const emitter = new Emitter(); //생성자 함수로 만듬
emitter.on('request', function () {
console.log('Hello!')
})
== // 같습니다.
this.events = {
request: [
function () { console.log('Hello!'}
]
}
on함수는 리스너 함수를 Emitter 아네 등록했습니다. 이제는 등록한 리스너를 호출해야합니다.
Emitter.prototype.emit = function(type) {
if (this.events[type]) {
this.events[type], forEach(function(listener) {
listener();
})
}
}
emitter.emit('request') // 이벤트 실행 'Hello!'