我很难理解为什么这会如此复杂,所以我怀疑我做错了什么。假设我有两个看起来像这样的 Controller 。它们在端点方面几乎是克隆,但不是在操作中——有点像接口(interface)实现
(function(someController){
//some require statements
var importantEvent = require("../Connectors/SaveEvents");
someController.init = function(app){
//app.get, app.post, etc etc etc
app.post('/saveThat', function(req, res){
//do some stuff
importantEvent.Saved({ from: "someController", data: stuff });
});
}
importantEvent.on('Saved', function(data){
//let this guy know it happened then do some stuff
})
})(module.exports);
好吗?好的。我的事件发射器不起作用,我怀疑它是非常错误的,看起来像这样......(SaveEvents.js)
(function(ImportantEvent){
var util = require('util');
var eventEmitter = require('events').EventEmitter;
eventEmitter.call(ImportantEvent); //??? is this needed?
ImportantEvent.Saved = function(origin, dataPayload) {
//maybe do some stuff to the data
var self = this;
self.emit('Saved', { from: origin, data: dataPayload });
};
util.inherits(OAuthEvents, eventEmitter);
})(module.exports);
当我使用 grunt 时,我被拒绝了
c:\projects\srsly\node\someController.js:21
importantEvent.on('Saved', function(data){
^
TypeError: Object #<Object> has no method 'on'
知道为什么或如何更好地解决这个问题吗?
最佳答案
这将如您所愿。请记住,module.exports 将被缓存,当您第二次运行 require('ImportantEvent')
时,您将获得先前初始化的实例(单例)
var inherits = require('util').inherits,
EventEmitter = require('events').EventEmitter;
function ImportantEvent(){}
inherits(ImportantEvent, EventEmitter);
ImportantEvent.prototype.Saved = function(){}
module.exports = new ImportantEvent();
关于javascript - 多个 Controller 上的 Node.js 事件发射器订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23417760/