我可以在Node.js/Express应用程序中为控制流使用自定义事件吗?

我可以在Node.js/Express应用程序中为控制流使用自定义事件吗?,node.js,express,Node.js,Express,几天来,我一直在研究各种技术,主要是NodeJS/Express应用程序中的异步与控制流承诺,我找不到任何人使用Express扩展的自定义事件来处理它。。。这就引出了一个问题,为什么 我对多个用户触发同一事件树时在应用程序级别范围冲突中发出的事件有一些担忧?以及关于传递req和res对象的最佳实践的一些关注。我不确定其中一个是否是这种控制流技术的交易杀手,但我希望社区提供一些信息,并思考一下为什么这是一个好主意或坏主意 下面是我所想的一些伪代码: class app.SessionControl

几天来,我一直在研究各种技术,主要是NodeJS/Express应用程序中的异步与控制流承诺,我找不到任何人使用Express扩展的自定义事件来处理它。。。这就引出了一个问题,为什么

我对多个用户触发同一事件树时在应用程序级别范围冲突中发出的事件有一些担忧?以及关于传递req和res对象的最佳实践的一些关注。我不确定其中一个是否是这种控制流技术的交易杀手,但我希望社区提供一些信息,并思考一下为什么这是一个好主意或坏主意

下面是我所想的一些伪代码:

class app.SessionController

    # validate & wash user entry
    @login = (req, res, userData) ->
        # // do stuff //
        app.emit 'session:userEntryValid', req, res, userData


    # see if user-entered passwrod and stored password match
    @validatePassword = (req, res, usr) ->
        # // do stuff //
        app.emit 'session:passwordAccepted', req, res, usr


    # set session variables and send to index
    @loginSuccess = (req, res, usr) ->
        # // do stuff //
        res.redirect '/'


###
SET UP EVENT LISTENERS
###

# Get user from database
app.on 'session:userEntryValid', (req, res, userData) ->
    app.Model.getUser(req, res, userData)

# Validate the password
app.on 'Model:User:emailFound', (req, res, usr) ->
    app.SessionController.validatePassword(req, res, usr)

# Process successful login
app.on 'session:passwordAccepted', (req, res, usr) ->
    app.SessionController.loginSuccess(req, res, usr)

事件的主要“问题”是它们是非线性的。承诺给你一个保证,它只解决一次,这是一次性的事情。事件更难跟踪,代码中没有一行接一行的地方,您可以准确地知道是什么导致了什么。这就是说,事件可能是当今JavaScript中使用最广泛的控件结构之一。更新:我确认了我最初的担忧,即事件对于应用程序来说是全局的。例如,如果两个用户同时登录,应用程序将发出可能相互交叉的事件。因为我使用的是coffeescript,所以我最终使用它提供了控制流所需的简单性和结果。