Tag: eventemitter

在模块之间共享事件

为了简单起见,我创build了一些小文件来testing这个想法。 基本上,我正在寻找一种方式来发射和事件的模块,然后在主文件中拿起例如 这是调用运行应用程序的主要文件 main.js var test = require('./test') var emitter = require('./emitter') var emit = new emitter() emit.on('response', function(data) { console.log(data) }) 这是事件发生的地方 fire.js var emitter = require('./emitter') var emit = new emitter var Test = function() { emit.sendEvent('response', 'test') } module.exports = Test 这里是创build的模块来处理应用程序事件触发 emitter.js var util = require('util') var eventEmitter = require('events').EventEmitter function […]

节点服务器启动时parsingjson对象

当节点server.js(这是我的入口点)开始时,我需要parsingjson对象,json文件的parsing是在我的项目的diffrent模块中完成的。 我有两个问题 build议使用server.js文件中的事件调用parsing函数 我读了关于event.emiter,但不知道如何从不同的模块调用函数…例子将是非常有益的 我有多个JSON文件 更新使其更清楚 如果我读取3个json文件对象(每行50个),当服务器/应用程序加载(server.js文件),这将是快速的我猜。 我的情况是,快速调用的有效path的列表是在这个JSON文件 app.get('/ run1',function(req,res){res.send('Hello World!');}); 所以run1应该在json文件中定义 (如path的白名单 ),如果用户把我没有定义的run2我需要提供错误,所以我认为,当服务器是要做这个调用,并保持与所有configuration有效的objpath和当用户打电话只是得到这个对象哪个alreayparsing(当服务器加载),并validation是否可以,我认为它更好的方法,而不是这样做 更新2 我会尝试更简单的解释。 让我们假设你有一个你应该听的path的白名单 ,比如run1 app.get('/run1', function 这些path列表是在特定文件夹下的项目中的jsons文件中定义的,在每次通过express对应用程序进行调用之前,都应该validation所请求的path是否位于json的path列表中。 这是给出的 。 现在该怎么做。 目前我已经开发了一个模块来查找这个json文件,并且在那里find特定的path。 现在我认为正确的解决scheme是,当节点应用程序开始调用这个function,并在一些对象中保存有效path列表时,在用户调用期间我可以非常容易地访问它,并检查path是否存在。 我的问题是如何在节点应用程序(Server.js)提供此对象时向validation程序模块提供一些事件。

本emit不工作,但self.emit正在工作。 为什么?

以下node.js脚本不起作用 var EventEmitter = require('events').EventEmitter; var util = require('util'); var TickE = function() { } util.inherits(TickE, EventEmitter); //TickE.prototype.__proto__ = EventEmitter.prototype; TickE.prototype.ticker = function() { var self = this; setInterval (function () { self.emit('tick'); }, 1000); }; var t = new TickE (); //console.log (util.inspect(t)); t.on('tick', function() { console.log ('Tick…');}); t.ticker(); 如果我像下面那样调用emit方法,那就不行了 TickE.prototype.ticker = function() { […]

什么时候应该使用EventEmitter?

我读了很多关于EventEmitter的东西。 但我不知道在哪种情况下,我需要在我的Node.js应用程序中使用它。

将全局variables传递给JavaScript中的事件callback函数?

在下面的代码中,我试图让mydata传递给callbackmydata 。 这是一个更大的问题,我有一个示例问题。 我假设这是一个范围问题。 我的代码有什么问题和/或我应该怎么做? var EventEmitter = require('events').EventEmitter; var myevent = new EventEmitter(); var mydata = 'my data!'; function myfunc (data, mydata) { console.log(data); console.log(mydata); }; myevent.on('data', function(data, mydata) {myfunc(data,mydata)}); myevent.emit('data', "data!"); 收益: data! undefined 我希望它回来: data! my data!

防止EventEmitter触发多个排队事件

我有一个MyWorker类的两个实例。 我将这些对象的start方法绑定到start事件。 还有一些要处理的项目。 我将一个项目分配给每个对象,并emit start事件。 for (i = 0; i < objs.length; i += 1) { objs[i].item = items.shift(); } self.emit('start'); 启动方法有一些asynchronousIO作业,所以一切工作正常。 处理done后,对象发出done事件。 done方法检查items.length > 0 。 如果是,则将下一个项目分配给相同的对象并发出start事件。 MyClass.prototype.done = function (data) { var self = this; data.object.item = items.shift(); self.emit('start'); } 现在,考虑一个IO等待时间很less的事件,或者事件没有IO操作的情况。 全部同步。 在这种情况下,即使在下一个对象start事件之前, done事件也会被触发。 done将分配新的对象,并再次发射start 。 这是造成这个问题的原因。 第二个对象的start现在将被调用两次。 任何想法如何解决这个问题?

统一事件和承诺是JS /节点

我试图理解使用事件(即Node的EventEmitter)和承诺在同一个系统中的最佳方式。 我喜欢松散地通过某种中央事件中心进行通信的解耦组件的想法。 当一个组件有一些可能与另一个组件相关的信息时,它可以在集线器上发送它。 生成信息的组件需要对消耗信息的组件一无所知。 但有时候,交互更多的是一个请求/响应行为,而这个行为对于这个承诺看起来更加理想。 我想知道是否有办法统一这些沟通方式。 例如,我可以有一个组件,有一个encryption的消息,并需要解密。 我想要一个松散耦合的组件之间的东西与消息和组件处理消息解密。 使用promise可以为请求/响应提供良好的交互,但是代表紧密的耦合。 例如: message = … some encrypted message … decrypting_lib.decrypt(message).then(function(decrypted_message) { … do something with decrypted_message … }) 但是正如你所看到的,我通过引用解密库有一个紧密的耦合。 有了事件,我可以删除这个耦合,但代码似乎更加尴尬: message = … some encrypted message … callback = function(decrypted_message) { if( message.id != decrypted_message.id ) return; hub.removeListener('message:decrypted', callback); … do something with decrypted_message … } hub.on('message:decrypted', […]

在linux上运行时检测到内存泄漏:

我尝试使用事件发射器来增加听众的数量。 但它不工作。 在窗口中没有警告的情况下运行。 (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. 跟踪 at EventEmitter.addListener (events.js:160:15) at Server.connect (/dir/node_modules/mongoose/node_modules/mongodb/lib/server.js:291:17) at Db.open (/dir/node_modules/mongoose/node_modules/mongodb/lib/db.js:190:19) at MongoStore._open_database (/dir/node_modules/connect-mongo/lib/connect-mongo.js:182:15) at MongoStore._get_collection (/dir/node_modules/connect-mongo/lib/connect-mongo.js:177:14) at /dir/node_modules/connect-mongo/lib/connect-mongo.js:194:16 at /dir/node_modules/mongoose/node_modules/mongodb/lib/db.js:200:5 at connectHandler (/dir/node_modules/mongoose/node_modules/mongodb/lib/server.js:272:7) at g (events.js:180:16) at EventEmitter.emit (events.js:95:17)

如何replace节点JS事件接收器`this`

发送事件时是否可以replacethis上下文? var that = {}, obj = new myType(); // how to pass `that` as the calling context? obj.emit('myEvent', data); obj.on('myEvent', function () { // I need it to arrive with `this`=`that` }); 我正在使用标准的EventEmitterinheritance方法: 在我的types的开始: events.EventEmitter.call(this); 在types函数之后: myType.prototype.__proto__ = events.EventEmitter.prototype; 但是这似乎覆盖任何与我在myType函数中指定的上下文的emit 。 而当我需要一个不同的上下文,我不知道如何发送它。

在socket io中停止接收事件一段时间

我在我的套接字客户端同时充斥着许多事件。 假设有任何两个事件eventA and eventB ,其中eventB仅在eventA发生eventB被使用。 所以到那时我想忽略那个事件。 如何在nodejs中使用socket.io来实现这个场景?