2012-09-02 13 views
14

Chciałbym wiedzieć, jak tworzyć zdarzenia niestandardowe w pliku node.js, a ja trafiam na ścianę. Jestem prawie pewny, że nie rozumiem czegoś, jak działa ekspresowe i jak działają zdarzenia node.js.Zdarzenia niestandardowe w pliku Node.js ze strukturą Express

https://creativespace.nodejitsu.com To jest aplikacja.

Gdy użytkownik tworzy nowe "działanie" (coś, co zdarzy się wiele razy), wysyła żądanie POST. Wtedy na mojej trasie, jeśli ten POST się powiedzie, chciałbym wydać wydarzenie, które mówi socket.io, aby utworzył nowy obszar nazw dla tego działania.

W moim pliku trasy:

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

And 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 

    }); 
}); 

więc błąd jest nie można nazwać SPOSÓB NA undefined i odnosi się do tego, co byłoby w linii 2 powyższy plik socket.io. Myślę, że psuje moje wymagania, może ... lub nie bardzo rozumiem, jak działają wydarzenia.

Każda pomoc, nawet odniesienie do dobrego czytania na temat wydarzeń Node.js, poruszyłoby się!

Dzięki!

+1

prostu głowy do góry, ja od pociągnął tę aplikację w dół. – Costa

Odpowiedz

11

Powinieneś traktować EventEmitter jako klasę, z której możesz dziedziczyć. Spróbuj tego:

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

util.inherits(MyEmitter, events.EventEmitter); 

Teraz można korzystać z klasy do słuchania i emitować zdarzenia:

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

Jeśli nie musisz dodawać funkcji, 'var EventEmitter = require ('events'). EventEmitter; var myEmitter = new EventEmitter; 'działa również. –

13

przypadku korzystania wyrazić można też po prostu nasłuchiwać zdarzenia na ekspresowej „app”, która dziedziczy z EventEmitter. Na przykład:

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

i emitują do niego jak

res.app.emit("myEvent", data) 
Powiązane problemy