路由器(发射器)和处理器(监听器)中的Node.js事件

node.js events in router(emitter) and handlers(listeners)

本文关键字:js Node 事件 中的 处理器 发射器 路由器 监听器      更新时间:2023-09-26

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

我尝试了node.js中的普通事件发射器,它将在相同的作用域文件中发出和接收事件。但是,我未能再次从router -> handler -> router进行所需的链接。

对事件、流、培根、事件总线、发布者-订阅者、套接字有任何帮助。我在节点事件方面的知识不是很丰富,所以使用Io等非常方便。

使用Express和node eventemitter你可以这样做:

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或request .params。这是Express docs http://expressjs.com/4x/api.html#req.params