带有Express框架的Node.js中的自定义事件

时间:2012-09-02 00:30:14

标签: node.js express socket.io

所以,我想知道如何在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

  });
});

所以我得到的错误是无法调用UNDEFINED的方法,它指的是上面socket.io中的第2行。我想我搞砸了我的要求,也许......或者我不太了解事件的运作方式。

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

感谢!!!

2 个答案:

答案 0 :(得分:19)

如果使用快递,你也可以只听取继承自EventEmitter的快递'app'上的活动。例如:

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

并像

一样向它发射
res.app.emit("myEvent", data)

答案 1 :(得分: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!");