javascript - 多个 Controller 上的 Node.js 事件发射器订阅

标签 javascript node.js

我很难理解为什么这会如此复杂,所以我怀疑我做错了什么。假设我有两个看起来像这样的 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/

相关文章:

javascript - 在 CKEditor 中设置字体大小和字体系列

javascript - 根据高度div向上移动div给他

node.js - Express 静态网络请求卡在 "pending"

javascript - Node Ramda + 根据值查找对象

javascript - 如何在Framework7上集中登录卡?

javascript - jQuery 切换复选框并切换 anchor 文本

javascript - 使用 JS 取消表单提交

node.js - momentJS:从不同时区的日期获取错误的时间戳

node.js - 如何将选项传递给 npm 的依赖包安装?

node.js - Node : listen EACCES: permission denied 0. 0.0.0:80