티스토리 뷰
Node.js는 이벤트 기반의 비동기 프로그램이다.
그러면 Node.js에서는 어떻게 이벤트를 생성하며 핸들링할까?
process.on('exit', function(code) {
console.log('종료');
});
process.on('uncaughtException', function() {
console.log('예외 발생');
});
우선 다음의 코드에서 알 수 있듯이,
on 메소드를 사용하면 parameter의 이벤트 명이 발생 시,
이벤트 발생 이후에 대한 행동을 지정할 수 있다. (콜백함수로)
하나의 이벤트 명에 대해서 여러 개의 이벤트 리스너 등록 시
node에서 warning 메시지를 뿜게 된다.
이벤트 연결 갯수를 제한함으로써 warning 메시지를 막을 수 있다.
process.setMaxListeners(11); // process에 이벤트 연결 갯수를 11개까지 허가한다.
javascript와 마찬가지로
등록된 이벤트를 제거할 수도 있다.
var onUncaughtException = function(error) {
console.log('예외 발생. 이번에는 pass');
process.removeListener('uncaughtException', onUncaughtException);
};
process.on('uncaughtException', onUncaughtException);
var test = function() {
setTimeout(test, 2000);
error.error.error();
};
setTimeout(test, 2000);
위의 코드는 uncaughtException 이벤트를 한번 핸들링 하고
이벤트 삭제를 통해 더 이상 핸들링하지 않도록 한 코드로
once() 함수로 대체가 가능하다.
위의 코드는 once 함수 대체 시 다음과 같다.
var onUncaughtException = function(error) {
console.log('예외 발생. 이번에는 pass');
};
process.once('uncaughtException', onUncaughtException);
var test = function() {
setTimeout(test, 2000);
error.error.error();
};
setTimeout(test, 2000);
이벤트 핸들링 관련 함수 이외에도
이벤트 발생 함수를 통해 특정 이벤트를 발생시킬 수 있다.
process.on('testEvent', function(arg1, arg2, arg3){
console.log(arg1, arg2, arg3);
process.exit();
});
process.emit('testEvent', 1, 2, 3);
위의 코드를 통해 볼 수 있듯이
emit 함수를 통해 특정 이벤트를 발생시킬 수 있으며
parameter를 전달할 수 있다.
이제 이벤트를 발생시키고 핸들링하는 작은 프로그램을 만들어 보자.
이벤트를 발생시키고 핸들링하는 코드를 분리한 이유는
일반적으로 생성과 연결 코드를 각각 모듈화하여 사용한다.
main.js
var rint = require('./rint.js');
rint.timer.on('tick', function(code) {
console.log('이벤트를 실행한다.');
});
rint.js
var events = require('events');
exports.timer = new events();
setInterval(function() {
exports.timer.emit('tick');
}, 1000);
'정리하기 > 모던웹을 위한 Node.js' 카테고리의 다른 글
외부 모듈 (0) | 2017.06.06 |
---|---|
http 모듈 (0) | 2017.05.28 |
node.js의 전역 객체 (0) | 2017.05.14 |
Node.js 개요 (0) | 2017.05.11 |
- Total
- Today
- Yesterday
- 뉴욕
- mocha.js
- 원하는것이있다면끝까지버텨라
- git tag
- eventbus
- 함수
- vue
- Android
- awesome-vue
- awe-some
- node.js
- 외부모듈
- #가상머신
- backbone.js
- browserify
- marionetts.js
- Typescript
- common.js
- MarionetteJS
- nodejs
- node
- js
- vuex
- nextTick
- javascript
- framework
- vue.js
- AndroidContext
- angular
- 자바스크립트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |