Articles of 事件

node.js eventemitter创build多个对象还是依赖于参数?

询问node.js中的eventemter 对于不同的事件,我应该在基础对象上创build新的发射器: forum.closeThread = new ee() forum.openThread = new ee() forum.openThread.on(threadID, foo) 或依靠论据来触发 forum.events.on('openThread', foo) forum.events.on('closeThread', bar) var bar = function (threadID) {…} 什么build议? 谢谢。

有connect.static事件吗?

我需要对来自a的文件服务的开始和结束做出反应 nodejs + connect + connect.static()+ connect.staticCache()环境。 我找不到任何文件:( connect.static(+ static.cache !!)是否提供任何事件?

强制x客户端等待node.js中客户端y的callback的最佳实践

我正在尝试为node.js的不同客户端实现一个数据交付工具的caching系统。 这是一个http服务,我用快递处理请求。 我的caching系统需要支持三种情况: 案例1 – 没有caching:程序通过给定的get方法接收数据。 如果成功,则写入caching。 情况2 – 有一个caching:程序接收caching。 情况3 – 没有caching,但是相同请求的get方法已经被不同的客户端调用并且正在被处理。 程序需要等待另一个请求通过get方法接收到它的数据,并传递新写入的caching。 我用事件解决了“情况3”的问题。 我为每个客户/请求组合注册一个事件。 但是注册一个开放的事件感觉不是很优雅。 排队的使用也不是最好的解决scheme之一。

重新连接到端口后,node.js serialport事件停止工作

我正在使用node.js的serialport2库来接收来自arduino的串行数据。 这工作像一个魅力,但时不时PC运行节点,决定停用USB端口,由于EMI 。 所有的端口再次被激活,串口掉线。 Node.js保持运行,但从不恢复到arduino的串行连接。 使用Serialport的'closed'事件我希望节点在短暂的延迟之后重新连接到串行端口。 这工作很好,迄今为止: var SerialPort = require('serialport2').SerialPort; var arduinoPort = '/dev/arduino'; // setting up the serial connection var arduinoSerial = new SerialPort(); var connectArd = function() { arduinoSerial.open(arduinoPort, { baudRate: 9600, dataBits: 8, parity: 'none', stopBits: 1, flowControl: false }); } connectArd(); // do something with incoming data arduinoSerial.on('data', function (data) […]

如何在nodejs和express中处理exception

在nodejs express来处理exception,检查callback中的err为: if(err!==null){ next(new Error ('Erro Message')); } 而这又会调用express的error handling程序中间件。 app.use(function(err, req, res, next){ if(!err) return next(); console.log('<——-Error Occured —–>'); res.send(500, JSON.stringify(err, ['stack', 'message'])); }); 但是为了调用next(err),我不得不通过所有的层遍历所有callback方法的下一个参考。 我觉得这是一个凌乱的办法。 有没有更好的方法来处理exception,并使用事件或域发送适当的响应。

Node.js请求数据事件不会触发。 我究竟做错了什么?

看起来好像请求对象上的数据事件没有被触发,或者我无法正确连接它,以便从中获取任何东西。 我得到了最后的结果,所有的url都在工作。 我看过论坛和文档,当我看着我的代码,它似乎应该工作。 我正在使用节点版本0.10.12。 我是新的。 我正试图让一个简单的服务器进入节点。 我正在关注“节点入门书”。 这些代码大部分来自那里,只是一些非常小的修改。 我已经直接从书中尝试了代码。 这是我现在正在使用的代码。 index.js var server = require("./server"); var router = require("./router"); var requestHandlers = require("./requestHandlers"); var handle = {}; handle["/"] = requestHandlers.start; handle["/start"] = requestHandlers.start; handle["/upload"] = requestHandlers.upload; if (process.argv[2] !== undefined && process.argv[2] !== null) { server.start(router.route, handle, process.argv[2]); } else { server.start(router.route, handle); } router.js […]

在同一时刻多次调用函数,但在nodejs中延迟执行不同的调用

我需要从不同的上下文中多次调用一个函数,但是我需要每次调用都不会在上一次调用之后经过一秒之后触发。 我会举一个例子: var i = 0; while(i<50) { do_something(i) i++ } function do_something(a) { console.log(a) } 我想要这个日志:'1',然后在第二个'2',然后在第二个'3'之后,然后在第二个'4'之后… 我不能使用简单的setInterval或setTimeout,因为这个函数“do_something(param)”可以在不同的来源在同一时间被调用,因为我正在与nodejs中的asynchronousfunction。 我希望保持通话的顺序,但是他们以最less的延迟一秒钟发射。 我想我应该将这些调用添加到一个队列,然后每秒一个调用出队和函数触发,但我真的不知道如何在nodejs中做到这一点。 先谢谢你

devise模式与规则引擎和node.js来处理权限

我有要求使用规则引擎在系统中实现angular色权限(这可能是一个矫枉过正?)但是权限是一种复杂和复杂的本身。 我很困惑如何授予访问权限或不使用规则引擎。 我也怀疑我应该用什么样的devise来实现它的可扩展性和可维护性。 所以在devise中的任何帮助或向我解释如何使用规则引擎将是伟大的。 使用nools ,mongoDB,node.js作为后端。 我在创build一个封装Nools的规则引擎实例(可能是一个反模式的内部平台可能?)在我的node.js应用程序的引导,并让它作为一个全局variables。 就像是: 'use strict'; var nools = require('nools'); var flows = require('./rule-engine.flows'); // A flow is a container of rules, so each flow could be a category of rules // In the same flow could have some more specific subcategories would be actionGroups? // I'm creating a ruleEngine instance […]

请在nextTick文档中解释示例

更新 :这原来是一个非常愚蠢的问题。 在引用的例子中我只是没有注意到一些简单的事情。 我一直在寻找关于刻度和事件循环的信息,而且大多数情况下很明显,但是nextTick文档中有一个例子令我困惑。 它说: API对于100%同步或100%asynchronous非常重要。 考虑这个例子: // WARNING! DO NOT USE! BAD UNSAFE HAZARD! function maybeSync(arg, cb) { if (arg) { cb(); return; } fs.stat('file', cb); } 这个API是危险的。 如果你这样做: maybeSync(true, function() { foo(); }); bar(); 那么不清楚foo()还是bar()会先被调用。 第一个问题: 为什么 foo不能保证先被调用? 有一个简单的函数调用(maybeSync),一个if和cb = foo的callback函数。 我认为这条链上的某些东西(可能)是asynchronous的,把事情推到事件队列并继续执行? 我看不出有什么可能有这种效果。 第二个问题:是否有一些文件可以帮助我理解这一点?

节点stream:如果一个可读的stream如果已经被排空(如果已经被排出),怎么会发出另一个可读的事件?

节点文档说明(对于可读stream的readable事件): 一旦内部缓冲区被耗尽,当有更多数据可用时,可读的事件将再次触发。 不过,它也说: 事件:'结束' 当没有更多数据要读取时,此事件触发。 请注意,除非数据完全消耗,否则结束事件不会触发。 这可以通过切换到stream动模式,或通过重复调用read()直到完成。 所以我的问题是,如果一个缓冲区被耗尽,它不会发出end事件,这将防止再次发射readable事件?