使用Express框架的Node.js中的自定义事件

所以,我想知道如何在node.js中创build自定义事件,而且我打了一堵墙。 我很确定我误解了关于expression式的工作原理以及node.js事件如何工作。

https://creativespace.nodejitsu.com这就是应用程序。

当用户创build一个新的“活动”(会发生很多次的事情),他们发送一个POST请求。 然后在我的路线,如果这个POST成功,我想发出一个事件,告诉socket.io为该活动创build一个新的命名空间。

在我的路线文件中:

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第2行。 我想我搞乱了我的要求,也许…或者我不太了解事件是如何工作的。

任何帮助,甚至参考良好的阅读Node.js事件将摇滚!

谢谢!!!

你应该把EventEmitter当成一个你可以inheritance的类。 尝试这个:

 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!"); 

如果使用快递,您也可以直接从EventEmitterinheritance的快递“应用程序”上收听活动。 例如:

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

并发射到它像

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