【问题标题】:node.js events in router(emitter) and handlers(listeners)路由器(发射器)和处理程序(侦听器)中的 node.js 事件
【发布时间】:2015-07-19 12:23:07
【问题描述】:

我需要在路由器中生成自定义事件,这将基于来自前端的数据。就像前端对象有handle_hello_world一样,那么路由器应该为handle_hello_world发出一个事件,以便相应的事件监听器可以唤醒并处理请求。来自此侦听器的回调应该再次返回到路由器,然后返回到前端。

我尝试使用 node.js 中的普通事件发射器,它们将在同一个作用域文件中发射和接收事件。但我未能再次从路由器 -> 处理程序 -> 路由器进行所需的链接。

任何关于事件、流、培根、事件总线、发布者-订阅者、socket.io 等的帮助都会很方便,因为我对节点事件的了解并不多。

【问题讨论】:

    标签: javascript node.js events eventemitter bacon.js


    【解决方案1】:

    使用 Express 和节点 EventEmmiter 你可以这样做:

    var emitter = require('events').EventEmitter;
    
    emitter.on('myEvent', function(cb) {
      //do something
    
      var data = 'some data';
    
      cb(data);
    });
    
    emitter.on('myEvent', function(cb) {
      //do something
    
      var data = 'other data';
    
      cb(data);
    });
    
    app.use('/path', function(req, res, next) {
      var eventName = 'myEvent';
      var listenersCount = EventEmitter.listenerCount(emitter, eventName);
    
      emitter.emit(eventName, function(dataFromEventHandler) {
        listenersCount--;
        if (!listenersCount) {
          //all listeners completed
          //do something else...
          next();
        }
      })
    });
    

    eventName 你可以从 req.body 或 req.params 获得。这是 Express 文档http://expressjs.com/4x/api.html#req.params

    【讨论】:

    • 找不到直接拆分发声体和听者的方法。
    • 如果你不喜欢回调可能想看看生成器和异步函数koajs.com
    • 修复:添加 listenersCount
    • 你可以为此编写一个简单的包装器
    猜你喜欢
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    相关资源
    最近更新 更多