在node.js中,如何将模块的所有事件转发到另一个

假设我正在创build自己的模块,它位于“networking”模块的顶部。 我的模块有自己的事件,但也允许客户端侦听由TCP连接发出的networking事件:

mymod.on('myevent',...); // my event mymod.on('connect',...); // net event mymod.on('end',...); // net event 

现在我正在做以下

 ... tcp.on('connect',function(){ self.emit('connect');}); tcp.on('end',function(){ self.emit('end');}); ... 

有没有一种更习惯的方式从我简单地转发所有事件(或事件的子集)从一个模块到另一个模块的客户端?

我预计这种情况会一直出现,所以我想尽可能地做到这一点。

我过去所做的是处理newListener事件 。 直到有一个人被关在我的课堂上,我才不用担心。 那么,什么时候,我把它附加到基类。

 this.on('newListener', function (event, listener) { baseClassInstance.on(event, listener); }) 

您可以通过首先检查event参数来过滤哪些事件通过。

当心,如果你必须删除监听。 在这些情况下,这可能不是最好的解决scheme。

我从来没有尝试过,现在不能testing,但你可以尝试以下;

将所有事件代理到另一个对象

 tcp.emit = mymod.emit.bind(mymod); 

代理事件并自行调用;

 var oldEmit = tcp.emit; tcp.emit = function() { mymod.emit.apply(mymod, arguments); return oldEmit.apply(this, arguments); } 

让我知道,如果它的作品! 以上只是一个概念的certificate,我没有想到这样做的副作用。