Tag: 事件

Node.js更新另一个保存事件的数据库对象

创build/更新对象保存到其他的更改最方便的方法是什么? 想象一下,我们有一个模型客户端,我们发出保存事件。 clientSchema.post('save', function (client) { process.emit('clientUpdate', client); }); 那么我们可以订阅这样的事件: process.on('clientUpdate', function(client) { //LOGIC GOES HERE }); 假设我们现在想更新ClientProjection。 你将在哪里find监听器,以及如何实现mongoDB(mongoose)的更新逻辑 – 使用模型,dao等?

使用Node.js,Redis和CouchDBpipe理将来的事件通知

我试图在服务器上使用Node.jspipe理date/时间事件通知。 有一种编程模式,我可以使用和适用于JavaScript? 目前,我正在使用命名的setTimeouts和Redis为每个超时存储一个布尔值。 当超时触发时,它检查Redis的布尔值。 如果返回true,则执行通知。 如果该值返回false,这意味着用户已经删除了事件,并没有通知。 这个解决scheme的工作,但我不相信这将是可扩展的,有几个原因: 1)事件可能在几天之后。 我不相信Redis长时间存储这些事件。 2)可能有成千上万的事件,我不希望setTimeouts遍布整个地方。 特别是在事件被删除之后。 我知道这个问题已经解决了,所以我希望有人能指点我一个资源或提供一个共同的模式。

Node.js – 更好的方式来pipe理JavaScript范围之间的callback?

我正在与Node.JS工作,并有两个对象,我通过callback之间移动。 我想出了一个解决scheme来维护范围引用到正确的对象。 我试图找出是否有更好的方法来做到这一点,或者如果这是一个很好的做法。 function Worker () {} Worker.prototype.receiveJob = function(callback, bossReference) { this.doJob(callback, bossReference); }; Worker.prototype.doJob = function(callback, bossReference) { callback.call(bossReference); // callback(); // this will not work }; function Boss () { this.worker = new Worker(); } Boss.prototype.delegateJob = function() { this.worker.receiveJob(this.whenJobCompleted, this); }; Boss.prototype.whenJobCompleted = function() { this.sayGoodJob(); }; Boss.prototype.sayGoodJob = function() { […]

基于时间的通知服务

我正在处理用户订阅计划并且到期的订阅。 所以基本上每个用户商店都有一个expiration字段。 我希望能够在用户计划一过期就能得到通知。 现在,我有一个工作,每天运行一次所有用户,并检查是否有人过期,但理想情况下,我希望得到一个服务器回发或某种事件,每当用户过期而不运行这一天。 你能想到任何处理这些事情的第三方服务/数据库/其他工具吗? 很多服务,例如Stripe,当用户的订阅被更新/过期时,都会通过webhook通知您。 他们只是像我一样反复地工作? 希望我已经说清楚了,希望能帮助我把search引向Google。 我目前的堆栈是Mongodb,Node.js,AWS 谢谢

NodeJS:一个全局事件发射器或它自己的每个模块?

我目前正计划在NodeJS中创build一个浏览器游戏。 游戏将基本上使用事件模块之间的每个通信。 什么是更高性能(或有优点或缺点?): 我只使用一个(全球?)EventEmitter。 每个模块都可以监听全局事件stream或者在全局事件stream中发送事件。 我会使用更复杂的事件名称,所以当事件被触发时,并不是全局事件stream中的所有侦听器都被调用。 我在单个事件stream上拥有非常多的侦听器。 例如:Player1收到一个项目。 事件“player1:inventory:item”被触发,并且只有player1在全局事件stream上监听该事件。 要么 它自己的每个模块扩展events.EventEmitter,并只提供该特定对象的事件。 每个EventEmitter上的监听器数量非常低,大部分时间只有一个监听器。 例如:一个玩家有一个questlog和一个库存。 对于每个玩家我创build一个questlog和库存的实例,把它们保存在一个集合(或玩家对象)中。 player1的任务日志只监听player1的库存。 我没有NodeJS中的EventEmitter的经验,只知道有一个警告,因为内存泄漏,在一个eventemitter或event上有10多个listener,但我不知道为什么。 我在这两个系统上看到了一些优点和缺点,但在技术方面我需要build议。 感谢您的帮助!

用承诺等待事件

我很乐意在一个承诺中包装一个事件。 更具体地说,我很乐意有一个方法来承诺,从每个事件发回的价值。 var events = require('events') var eventEmitter = new events.EventEmitter() eventEmitter.on("add", function(data){ console.log(data+1) return data+1 }) eventEmitter.emit('add', 5) eventEmitter.emit('add', 3) setTimeout(function(){ eventEmitter.emit('add', 13) }, 1000) setTimeout(function(){ eventEmitter.emit('add', 10) }, 3000) 这是一个会发出6,4,14,11的事件。 我所喜欢的是一个承诺包装,返回[6, 4, 14, 11] 。 //eventWrapper(emissions, event, [eventArguments]) eventWrapper(4, eventEmitter, "add").then(console.log) // [6, 4, 14, 11] 理想的情况下,也有一个超时的论点,如果排放不返回,并在x秒内达到排放量有错误。 最后(我知道这已经达到了一些),但是对于socket.io来说,有一个问题是广播的处理程序不会返回callback,在这个非常特殊的用途中,事件可以被代理为由一个完全不同的事件处理,像这样。 eventEmitter.on("callback", function(data){ console.log(data+1) return data+1 […]

Nodemailer不会退出邮件

在我的脚本中,我想用一个电子邮件发送有关使用Nodemailer的脚本运行的数据。 在脚本的中间使用相同的transporter器,并成功发送电子邮件。 但是,退出事件处理程序中的相同代码根本不会执行任何操作。 没有电子邮件,没有“发送报告!” 输出到控制台,虽然我得到的输出到控制台的mailOptionvariables。 假设asynchronous操作在退出之前没有完成,我添加了一个临时延迟步骤来validation这一点。 还没有生成电子邮件。 难道我做错了什么? function exitHandler(er) { end = moment().utc(); // report template var tplPath = path.resolve('report.html'); var juiceFileDeAsync = deasync(juice.juiceFile); var tpl = juiceFileDeAsync(tplPath, { webResources: {images: false} }); var email = nunjucks.renderString(tpl, { startDate: start.format("MMMM Do YYYY, h:mm:ss a"), duration: end.diff(start,'seconds'), report: sentEmails, warns: warns, errors: errors }); // […]

在node.js中,何时使用事件,何时使用直线callback函数?

在我看来,“核心”node.jscallback语法,即 function foo(data, callback) { callback(false, data2); } 在语义上被事件所取代,除此之外 随着事件,你失去了静态检查的最后一点 活动更灵活 一旦你有超过2或3个callback函数,callback变得相当笨拙 事件可能是一个非常轻微的性能开销(但过早的优化在几乎所有情况下都是轻描淡写) (但是再一次,你也必须记住事件…) 那么什么时候使用什么是一个好的策略呢?

有没有办法在Node.js中“吃”事件?

有没有办法“吃”一个事件的其他听众? x.on("test", function(x){ if(x==4) { console.log("Event1"); } }); x.on("test", function(x){ if(x==5) { console.log("Event2"); } }); x.on("test", function(x){ console.log("Event3"); }); x.emit("test", 4); x.emit("test", 5); x.emit("test", -1); 有没有办法让事件1“吃”(不允许发生)其他事件,如果x是4? 如果(x!= 4 && x!= 5)没有添加到事件3(如果有很多听众,它可能会很快恼人)。 奖金:我可以有一个“后备”事件来捕捉没有任何监听者的事件。

捕捉事件firebird与nodejs不工作

我使用NVM安装了nodejs,以便能够使用不同的版本。 然后按照这些说明安装Firebird。 后来我按照本教程底部的说明来捕捉事件。 基本上它增加了一个触发器,使“post_event”。 SQL> SET TERM !! ; SQL> CREATE TRIGGER new_employee_event FOR employee CON> ACTIVE CON> AFTER UPDATE CON> AS CON> BEGIN CON> POST_EVENT 'update_employee'; CON> END!! SQL> SET TERM ; !! 这里是我用于听事件的代码: var fb = require("firebird"); var http=require('http'); var sys=require('sys'); var con = fb.createConnection(); con.connectSync('localhost:/var/lib/firebird/2.5/data/employee.fdb','sysdba','masterkey',''); con.addFBevent("update_employee"); con.on("fbevent",function(event,count){ var rows = null; rows […]