我需要在路由器中生成自定义事件,该事件应基于来自前端的数据。就像前端对象有handle_hello_world
一样,路由器应该为handle_hello_world
发出一个事件,这样相应的事件监听器就可以唤醒并处理请求。来自此侦听器的回调应该再次返回路由器,然后返回到前端。
我尝试使用node.js中的普通事件发射器,它们会在同一个作用域文件中发出和接收事件。但我未能通过路由器进行所需的连接 - >处理程序 - >路由器再次。
任何有关事件,流,培根,事件总线,发布者订阅者,socket.io等的帮助都会很方便,因为我对节点事件的了解并不是很好。
答案 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