2012-09-02 13 views
14

So würde ich gerne wissen, wie benutzerdefinierte Ereignisse in node.js erstellt werden, und ich werde eine Wand schlagen. Ich bin mir ziemlich sicher, dass ich etwas falsch verstehe, wie Express funktioniert und wie node.js Ereignisse funktionieren.Benutzerdefinierte Ereignisse in Node.js mit Express-Framework

https://creativespace.nodejitsu.com Das ist die App.

Wenn ein Benutzer eine neue "Aktivität" erstellt (was häufig vorkommt), senden sie eine POST-Anfrage. Wenn dieser POST innerhalb meiner Route erfolgreich ist, möchte ich ein Ereignis ausgeben, das socket.io anweist, einen neuen Namespace für diese Aktivität zu erstellen.

In meiner Route-Datei:

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

Und 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 

    }); 
}); 

So ist der Fehler, den ich bekommen kann nicht Methode undefinierter RUFEN und es bezieht sich auf das, was wäre Linie 2 in das socket.io oben. Ich denke, dass ich meine Anforderungen durcheinander bringe, vielleicht ... oder ich verstehe nicht ganz, wie Ereignisse funktionieren.

Jede Hilfe, auch ein Hinweis auf gutes Lesen auf Node.js Ereignisse würde rocken!

Danke !!!

+1

Nur ein Heads-up, ich habe diese App herunter, da gezogen. – Costa

Antwort

11

Sie sollten EventEmitter als eine Klasse behandeln, von der Sie erben können. Versuchen Sie folgendes:

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

util.inherits(MyEmitter, events.EventEmitter); 

Jetzt können Sie Ihre Klasse verwenden können, um zuzuhören und Ereignisse zu emittieren:

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

Wenn Sie keine Funktionalität hinzufügen müssen, 'var EventEmitter = require ('events'). EventEmitter; var myEmitter = new EventEmitter; 'funktioniert auch. –

13

Wenn Express verwenden, können Sie auch hören nur für Event auf die ausdrückliche ‚App‘, die von EventEmitter erbt. Zum Beispiel:

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

und emittieren, um es wie

res.app.emit("myEvent", data) 
Verwandte Themen