86 votes

Écouter tous les événements envoyés dans Node.js

Dans Node.js, y a-t-il un moyen d'écouter tous les événements émis par un objet EventEmitter ?

Par exemple, pouvez-vous faire quelque chose comme...

event_emitter.on('',function(event[, arg1][, arg2]...) {}

L'idée est que je veux saisir tous les événements crachés par un côté serveur EventEmitter JSON.stringify les données de l'événement, les envoyer via une connexion webockets, les reformer du côté client en tant qu'événement, puis agir sur l'événement du côté client.

81voto

Martin Points 3187

Je sais que c'est un peu vieux, mais bon sang, voici une autre solution que vous pourriez prendre.

Vous pouvez facilement surveiller la fonction d'émission de l'émetteur que vous souhaitez capter tous les événements :

function patchEmitter(emitter, websocket) {
  var oldEmit = emitter.emit;

  emitter.emit = function() {
      var emitArgs = arguments;
      // serialize arguments in some way.
      ...
      // send them through the websocket received as a parameter
      ...
      oldEmit.apply(emitter, arguments);
  }
}

C'est un code assez simple et devrait fonctionner sur n'importe quel émetteur.

43voto

Henrik Joreteg Points 840

Comme mentionné, ce comportement n'est pas dans node.js core. Mais vous pouvez utiliser EventEmitter2 de hij1nx :

https://github.com/hij1nx/EventEmitter2

Il ne cassera aucun code existant en utilisant EventEmitter, mais ajoute la prise en charge des espaces de noms et des caractères génériques. Par exemple :

server.on('foo.*', function(value1, value2) {
  console.log(this.event, value1, value2);
});

22voto

pravdomil Points 1735

Avec les classes ES6, c'est très facile :

class Emitter extends require('events') {
    emit(type, ...args) {
        console.log(type + " emitted")
        super.emit(type, ...args)
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X