2012-09-02 1 views
14

node.js에서 사용자 정의 이벤트를 작성하는 방법을 알고 싶습니다. 벽을 치고 있습니다. 나는 익스프레스가 어떻게 동작하고 node.js 이벤트가 어떻게 작동하는지에 대해 오해하고 있다고 확신한다.Express 프레임 워크를 사용하는 Node.js의 사용자 정의 이벤트

https://creativespace.nodejitsu.com 그건 응용 프로그램입니다.

사용자가 새로운 "활동"(여러 번 발생하는)을 만들면 POST 요청을 보냅니다. 그런 다음 내 경로 내에서 POST가 성공하면 socket.io에게 해당 활동에 대한 새 네임 스페이스를 만들도록 이벤트를 내보내고 싶습니다. 내 경로 파일에서

:

var eventEmitter = require('events').EventEmitter;  
// Tell socket.io about the new space. 
eventEmitter.emit('new activity', {activityId: body.id}); 

그리고는 Socket.IO에 :

// When someone creates a new activity 
eventEmitter.on('new activity', function (data) { // this gives and error 
    var newActivity = '/activity?' + data.activityId; 
    io.of(newActivity).on('connection', function (socket) { 

    // Socket.io code for an activity 

    }); 
}); 

그래서 나는이 정의의 방식에 호출 할 수있다 얻고 그것을 참조하는 오류에 라인이 무엇 일 것 위의 socket.io. 내 요구 사항을 엉망으로 만들고있는 것 같아요. 아니면 이벤트가 어떻게 작동하는지 이해하지 못하고 있습니다.

Node.js 이벤트에 대한 유용한 참고 자료조차도 도움이됩니다.

감사합니다 !!!

+1

처럼 그것을 그냥 머리를 방출, 나는부터 아래로이 응용 프로그램을 뽑아했습니다. – Costa

답변

11

EventEmitter는 상속 할 수있는 클래스로 취급해야합니다. 이 시도 :

function MyEmitter() { 
    events.EventEmitter.call(this); 
} 

util.inherits(MyEmitter, events.EventEmitter); 

지금 이벤트를 듣고 방출하는 클래스를 사용할 수 있습니다

var e = new MyEmitter; 
e.on("test", function (m) { console.log(m); }); 
e.emit("test", "Hello World!"); 
+11

기능을 추가 할 필요가 없다면,'var EventEmitter = require ('events'). EventEmitter; var myEmitter = new EventEmitter;도 잘 작동합니다. –

13

사용하는 경우 당신은 또한 단지 EventEmitter에서 상속 명시 '응용 프로그램'에 대한 이벤트를 수신 할 수있는 표현한다. 예를 들어 :

res.app.on("myEvent", function) 

res.app.emit("myEvent", data) 
관련 문제