Die Art und Weise, wie der Ereignis-Emitter funktioniert, ist, dass Sie das selbe Ereignis-Emitter-Objekt verwenden müssen, um auf das zu hören, das Sie emittiert haben. Sie benötigen also etwas wie dieses:
Um dies unter den verschiedenen Teilen Ihres Projekts zu teilen, sollten Sie ein Modul daraus erstellen und es wo immer nötig benötigen.
my-event.js:
var eventEmitter = new require('events').EventEmitter();
module.exports = eventEmitter;
Dann Sie require
diese eventEmitter
wo Sie es
blog.js:
var myEvent = require('../my-event');
blog.post('save',function(blog){
myEvent.emit('newBlog', blog);
});
0 verwenden möchten
var myEvent = require('./my-event');
myEvent.on('newBlog', console.log);
Wenn Sie Ihr eigenes Modul nicht gehen wollen, sich die Mühe zu schaffen und erfordern, können Sie die globale process
verwendet werden, die auch ein EventEmitter ist.
anywhere:
process.on('my-custom-event', myCustomHandler);
anywhere-else:
process.emit('my-custom-event', data);
Obwohl eine faire Warnung: Sie die globale Reichweite sind umweltfreundlich. Wenn ein anderes Modul dasselbe tut und dieselben Ereignisnamen verwendet, dann haben Sie einen Konflikt, der auf unerwartete Weise auftreten kann und noch schwieriger zu debuggen ist.
denke ich Mungo Schema vererben EventEmitter, also kann ich 'this.emit gerade tun (‘ newBlog ', blog) 'statt' eventEmitter.emit (' newBlog ', blog); ', aber der Event-Listener funktioniert nicht.und ich denke, wenn ich den gleichen Ereignisemitter immer dann passieren muss, wenn ich es benutzen muss, was ist der Punkt? Ich kann das Ereignis einfach durch die tatsächliche Geschäftslogik ersetzen, um mir eine Menge Ärger zu ersparen. – paynestrike
@paynestrike Der Punkt ist die Entkopplung. Es bedeutet, dass das, was emittiert, nicht über all die Dinge, die zuhören, Bescheid wissen muss. –
@AaronDufour dann, wie kann ich eventEmitter in meinem Modell zu app.js übergeben? – paynestrike