2011-04-21 147 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(); 
}); 

然後當路由被打,你會看到在控制檯響應。當然你可以按照你的意願實現它。

相關問題