带有 Express 框架的 Node.js 中的自定义事件
Posted
技术标签:
【中文标题】带有 Express 框架的 Node.js 中的自定义事件【英文标题】:Custom Events in Node.js with Express framework 【发布时间】:2012-08-27 06:49:18 【问题描述】:所以,我想知道如何在 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
);
);
所以我得到的错误是 CANNOT CALL METHOD ON OF UNDEFINED 它指的是上面 socket.io 中的第 2 行。我想我搞砸了我的要求,也许......或者我不太了解事件是如何工作的。
任何帮助,甚至是对 Node.js 事件的良好阅读的参考都会震撼!
谢谢!!!
【问题讨论】:
提醒一下,我已经下架了这个应用程序。 【参考方案1】:如果使用 express,您也可以只监听从 EventEmitter 继承的 express 'app' 上的事件。例如:
res.app.on("myEvent", function)
并像这样向它发射
res.app.emit("myEvent", data)
【讨论】:
【参考方案2】:您应该将 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!");
【讨论】:
如果您不需要添加功能,var EventEmitter = require('events').EventEmitter; var myEmitter = new EventEmitter;
也可以。以上是关于带有 Express 框架的 Node.js 中的自定义事件的主要内容,如果未能解决你的问题,请参考以下文章
在带有 Node 和 Express 的 IE10 中使用 CORS 的安全错误