pay*_*ike 11 events mongoose node.js emit
我想在新博客保存时发出事件
blog.post('save',function(blog){
this.emit('newBlog',blog)
})
Run Code Online (Sandbox Code Playgroud)
在我的项目的其他地方说app.js可以听这个事件
EventEmitter = require('events').EventEmitter;
emitter = new EventEmitter();
emitter.on('newBlog',function(blog){
console.log(blog);
})
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
事件发射器的工作方式是您必须使用相同的事件发射器对象来侦听您曾经发射的事件.所以你需要这样的东西:
要在项目的不同部分之间共享,您应该从中创建一个模块,并在需要的地方需要它.
my-event.js:
var eventEmitter = new require('events').EventEmitter();
module.exports = eventEmitter;
Run Code Online (Sandbox Code Playgroud)
然后,你require
这个eventEmitter
地方,你想用它
blog.js:
var myEvent = require('../my-event');
blog.post('save',function(blog){
myEvent.emit('newBlog', blog);
});
Run Code Online (Sandbox Code Playgroud)
app.js:
var myEvent = require('./my-event');
myEvent.on('newBlog', console.log);
Run Code Online (Sandbox Code Playgroud)
如果您不想遇到创建和需要自己的模块的麻烦,可以使用global process
也是一个EventEmitter.
anywhere:
process.on('my-custom-event', myCustomHandler);
Run Code Online (Sandbox Code Playgroud)
anywhere-else:
process.emit('my-custom-event', data);
Run Code Online (Sandbox Code Playgroud)
虽然公平警告:你正在污染全球范围.如果某些其他模块也在使用相同的事件名称,那么您就会发生冲突,这种冲突可能以意想不到的方式出现,甚至更难调试.
归档时间: |
|
查看次数: |
4362 次 |
最近记录: |