Как испустить событие в промежуточном программном обеспечении мангуста?

Я хочу выпустить событие, когда новый блог сохранен

blog.post('save',function(blog){
    this.emit('newBlog',blog)
})

и где-то еще в моем проекте скажите, что app.js может прослушать это событие

EventEmitter  = require('events').EventEmitter;
emitter = new EventEmitter();

emitter.on('newBlog',function(blog){
    console.log(blog);
})

как это сделать?

Ответ 1

Как работает излучатель событий, вы должны использовать объект-эмиттер событий тот же, чтобы прослушивать то, что вы использовали для испускания. Поэтому вам нужно что-то вроде этого:

Чтобы поделиться этим с другими частями вашего проекта, вы должны создать модуль из него и потребовать его там, где это необходимо.

my-event.js:

var eventEmitter = new require('events').EventEmitter();
module.exports = eventEmitter; 

Затем вы require этот eventEmitter, где хотите его использовать

blog.js:

var myEvent = require('../my-event');
blog.post('save',function(blog){
    myEvent.emit('newBlog', blog);
});

app.js:

var myEvent = require('./my-event');
myEvent.on('newBlog', console.log);

Если вы не хотите беспокоиться о создании и требовании своего собственного модуля, вы можете использовать глобальный process, который также является EventEmitter.

anywhere:

process.on('my-custom-event', myCustomHandler);

anywhere-else:

process.emit('my-custom-event', data);

Хотя справедливое предупреждение : вы загрязняете глобальную область. Если какой-то другой модуль также делает то же самое и использует те же имена событий, то у вас есть конфликт, который может возникнуть неожиданным образом и еще сложнее отладить.

Ответ 2

Если вы выбрали свое событие из документа (экземпляр конкретной схемы), вы должны прослушать этот экземпляр для получения события.

Если вы хотите слушать глобально по всем событиям, генерируемым всеми экземплярами, вы должны выдать событие из схемы.

blog.post('save',function(blog){
    blog.schema.emit('newBlog',blog)
})

И в вашем приложении app.js, например, вы можете прослушивать события в схеме:

Blog.schema.on('newBlog',function(blog){
    console.log(blog);
})