2012-09-02 23 views
14

Entonces, me gustaría saber cómo crear eventos personalizados en node.js, y estoy chocando contra una pared. Estoy bastante seguro de que estoy malinterpretando algo sobre cómo funciona Express y cómo funcionan los eventos de node.js.Eventos personalizados en Node.js con Express framework

https://creativespace.nodejitsu.com Esa es la aplicación.

Cuando un usuario crea una nueva "actividad" (algo que sucederá muchas veces) envía una solicitud POST. Luego, dentro de mi ruta, si ese POST tiene éxito, me gustaría emitir un evento que le indique a socket.io que cree un nuevo espacio de nombres para esa actividad.

En mi archivo de ruta:

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

Y 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 

    }); 
}); 

Así que el error que consigo es no puede llamar al método EN DE indefinido y se refiere a lo que sería la línea 2 el socket.io arriba. Creo que estoy estropeando mis necesidades, tal vez ... o no estoy entendiendo cómo funcionan los eventos.

Cualquier ayuda, incluso una referencia a una buena lectura en los eventos de Node.js sería genial!

Gracias !!!

+1

a jefes, he puesto sacó esta aplicación hacia abajo. – Costa

Respuesta

11

Debe tratar EventEmitter como una clase que puede heredar. Prueba esto:

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

util.inherits(MyEmitter, events.EventEmitter); 

Ahora usted puede utilizar su clase para escuchar y emitir sucesos:

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

Si no necesita agregar funcionalidad, 'var EventEmitter = require ('events'). EventEmitter; var myEmitter = new EventEmitter; 'funciona también. –

13

Si se utiliza expresan también se puede escuchar sólo para el evento en la 'app' expreso que hereda de EventEmitter. Por ejemplo:

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

y emiten a ella como

res.app.emit("myEvent", data) 
Cuestiones relacionadas