【问题标题】:Nodejs: use eventEmitter object globallyNodejs:全局使用 eventEmitter 对象
【发布时间】:2013-06-15 04:34:16
【问题描述】:

假设我有 3 个公开的功能:用户、帖子、文章

所有这些都需要将消息发送到一个名为 mediator 的文件,其中设置了所有事件。

目前我在这样做时遇到了麻烦

在中介文件中我有这样的东西:

var EventEmitter = require('events').EventEmitter;
  , pubsub = new EventEmitter();

exports.pubsub = new EventEmitter()

pubsub.on('loggedIn', function(msg) {
    console.log(msg);
});

在用户、帖子和文章功能中。像这样:

var mediator = require('../config/mediator')
    , _ = require('underscore')

exports.account = function(req, res) {
  var returned = _.omit(req.user._doc, 'password' )

  mediator.pubsub.emit('loggedIn', 'A User logged in');

  res.send(returned);
};

发射被完全忽略,没有错误或任何东西。不确定我是否做得对,所以任何方向都会受到赞赏。不过,期望的回报是按预期工作的。

【问题讨论】:

    标签: node.js eventemitter


    【解决方案1】:

    您将 EventEmitter 实例化两次,因此导出的不是订阅事件的那个。这有效:

    var EventEmitter = require('events').EventEmitter
      , pubsub = new EventEmitter();
    
    exports.pubsub = pubsub;
    
    pubsub.on('loggedIn', function(msg) {
        console.log(msg);
    });
    

    【讨论】:

    • 不知道我怎么没看到。可能是因为沮丧:)。谢谢!
    • 赞成,如果 pub.js 和 sub.js 是分开的并且需要相同的 eventemitter 对象,你将如何处理这个问题
    • @PirateApp 您可以使用构造函数将实例传递到事件发射器构造中,或者将事件发射器放在单独的文件中并执行类似 const 发射器 = require('./eventEmitter. js') 从 pub.js 和 sub.js 获得相同的实例
    猜你喜欢
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多