路由器(发射器)和处理程序(侦听器)中的node.js事件

时间:2015-07-19 12:23:07

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

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

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

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

1 个答案:

答案 0 :(得分:0)

使用Express和node 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();
    }
  })
});
你可以从req.body或req.params获得

eventName。这是Express docs http://expressjs.com/4x/api.html#req.params