2011-04-21 149 views
8

我有一个巨大的功能,嵌套的回调很多。我想让它更清洁,更容易处理。所以,我正在考虑使用自定义事件侦听器如何在node.js(express.js)中创建自定义事件侦听器?

就像一个函数完成时,在回调中,而不是放置一大块代码,它只是发出一个事件,然后侦听器就会运行。

那么,如何在node.js中做到这一点?我仍然在寻找一个很好的例子来指导我。

+2

相关http://stackoverflow.com/questions/4903154/how-do-i-avoid-deeply-nested-code-in-node-js? – 2011-04-21 02:12:53

+0

谢谢。我会尝试。哪一个更好? – murvinlai 2011-04-21 18:10:45

+0

第一个与你的问题最相关。 – 2011-04-22 11:15:08

回答

7

您可能想要创建一个EventEmitter对象,并调用emit()就可以了。

19

您可以设置这样的活动

app.on('event:user_created', callback); 

然后你就可以发出他们

app.emit('event:user_created', data); 

express.js使用EventEmitter

+1

实际上,'app'在** express **框架中扩展了'EventEmitter'。 [[email protected]](https://github.com/senchalabs/connect/blob/master/lib/connect.js#L68)'utils.merge(app,EventEmitter.prototype);' – antitoxic 2012-10-07 17:05:56

+0

因此, app'可以作为应用程序范围的调度 – 2013-06-26 19:58:23

+0

这将采取一个错误的对象 - app.emit('event:foo',err,data) - 例如,如果我们返回数据库查询的结果? – starsinmypockets 2014-01-07 02:19:43

3

我刚刚遇到这个问题,我想在我的2美分中筹码,专门回应路易斯。

在快递,如果你想在“应用”的实例来监听,你会做一些像自定义事件:

app.on('testEvent', function() { 
    return console.log('responded to testEvent'); 
}); 

app.get('/test', function (req, res) { 
    app.emit('testEvent'); 
    return res.status(200).end(); 
}); 

然后当路由被打,你会看到在控制台响应。当然你可以按照你的意愿实现它。