Articles of 同步

node.js中的readFileSyncerror handling

我有这个代码 var fd = fs.openSync(filePath,"r"); var fr = fs.readSync(fd, buffer, 0, size, 0); 它会抛出这样的错误 events.js:72 throw er; // Unhandled 'error' event ^ Error: OK, open 'C:\Users\iahmed16\Desktop\eclipse WS\test\images\af31a9e0a98939be82f887b0005c21752e71425e.jpg' 如何处理这个错误? 如果你知道错误的含义是什么?

为callback函数添加额外的参数

我正在Node.js中构build一个系统,该系统应该查找文件夹数组中的所有文件,统计它们,然后使用该信息做一些额外的工作。 我正在使用fs.readdir()从每个文件夹同步获取所有文件。 我的代码如下所示: for(i=0,max=paths.length; i<max; i++) { var path = paths.pop(); console.log("READING PATH: " + path); fs.readdir(path, function(err, files) { handleDir(err, files, path); }); } 问题是,取决于readdir()执行的速度,handleDir()得到错误的path。 发生这种情况的原因是,callback运行时,下一个循环已经开始 – 这意味着pathvariables已经改变。 所以,我需要做的是以某种方式将该pathvariableslocking为特定的callback函数。 我想不出有什么好办法做到这一点 – 任何人有一些想法?

使用EventSourcing(NodeJS,MongoDB,JSON)跨多个偶尔连接的客户端同步数据

我正面临着在服务器和多个客户端之间实现数据同步的问题。 我读了关于事件采购,我想用它来完成同步部分。 我知道这不是一个技术问题,更多的是一个概念问题。 我只是将所有事件直接发送到服务器,但客户端devise为不时脱机使用。 这是基本的概念: 服务器存储每个客户端应该知道的所有事件,它不重放这些事件来提供数据,因为主要目的是同步客户端之间的事件,使他们能够在本地重放所有事件。 客户端拥有一个JSON存储库,同时保存所有事件并重build存储/同步事件中的所有不同集合。 由于客户端可以离线修改数据,因此保持一致的同步周期并不重要。 考虑到这一点,服务器应该在合并不同事件时处理冲突,并在发生冲突时询问特定用户。 所以,对我来说,主要的问题是要消除客户端和服务器之间的差异,以避免将所有事件发送到服务器。 我也遇到了同步过程的顺序问题:先推送更改,先更改推送更改? 我目前build立的是在服务器端默认的MongoDB实现,它隔离了所有查询中的特定用户组的所有文档(目前仅处理authentication和服务器端数据库工作)。 在客户端,我已经构build了一个NeDB存储的封装,使我能够拦截所有的查询操作来创build和pipe理每个查询的事件,同时保持默认的查询行为不变。 我还通过实现由客户端生成的自定义ID来补偿neDB和MongoDB的不同ID系统,这些ID是文档数据的一部分,因此重新创build数据库不会混淆ID(在同步时,这些ID应在所有客户端保持一致)。 事件格式如下所示: { type: 'create/update/remove', collection: 'CollectionIdentifier', target: ?ID, //The global custom ID of the document updated data: {}, //The inserted/updated data timestamp: '', creator: //Some way to identify the author of the change } 为了节省客户端上的一些内存,我将在一定数量的事件中创build快照,以便完全重放所有事件将更有效率。 所以,为了缩小这个问题 :我能够在客户端重放事件,我也能够在客户端和服务器端创build并维护事件,在服务器端合并事件也不成问题。复制整个数据库与现有的工具不是一个选项,因为我只同步数据库的某些部分(甚至不是整个集合,因为文档分配不同的组,他们应该同步)。 但是我遇到的麻烦是 : 确定同步时从客户端发送什么事件的过程(避免发送重复事件甚至所有事件) 确定要发送回客户端的事件(避免发送重复事件,甚至是所有事件) […]

如何在node.js中的同一个进程中同步对文件的访问?

我有一个Web服务器,读取和写入磁盘上的数据文件。 我想要一个文件只写入一个Web请求。 这里有一个示例程序来说明我的问题。 它将状态文件保存在“/tmp/rw.txt”中,并在每次Web命中时递增整数内容。 运行这个程序,然后运行诸如ab -n 10000 -c 1000 http://localhost:3000/ ,表明通过多次命中从文件中读取相同的值,并且它被多次写入。 注意:我知道flock()和fs-ext 。 但是,flock()会将文件locking到当前进程; 因为这里所有的访问都在同一个进程中,flock()不起作用(这个例子相当复杂)。 另外请注意,我通常会使用express,async等来完成大部分工作。 只是为了举例而坚持基础。 var http = require("http"), fs = require("fs"); var stateFile = "/tmp/rw.txt"; var server = http.createServer(function(req, res) { var writeNum = function(num) { var ns = num.toString(10); console.log("Writing " + ns); fs.writeFile(stateFile, ns, function(err) { if (err) { res.writeHead(500, […]

如果使用openSync打开文件,如何获取node.js中的文件描述符

我已经注意到openSync可能是个大问题,当你用openSync打开一个文件时,你不会得到文件描述符。 如果使用asynchronous调用打开,则只会将其作为callback的参数。 问题是你必须有文件描述符来closures文件! 还有一些程序员可能想要对文件做一些其他的事情,你也需要文件描述符。 在fs API中,node.js似乎没有提供一种访问fdvariables的方法,如果您打开使用同步调用,则在asynchronous模式下打开时,会返回callback。 这基本上使同步开放对大多数应用程序不可用。 我真的不希望不得不使用asynchronous文件打开和closures在我的发展,如果我可以避免它,有没有办法获得fdvariables我需要在使用同步打开时成功closures文件?

如何与mongoose和nodejs进行同步调用

我正在devise一个客户端/服务器同步function。 客户端发送一堆更改的事件到服务器。 服务器将根据请求的项目状态进行创build,删除或修改。 在数据库操作之后,服务器需要发送一个摘要给客户端。 下面是我的服务器端代码的摘录,devise与mongoose和restify。 var EventModel = mongoose.model('Event', eventSchema); server.post("/sync", function (req, res, next) { var events = req.params.events; var created = [], deleted = [], updated = []; events.forEach(function (elem) { if (elem.status == 0) { // Delete EventModel.remove({ _id: elem.uuid }, function (err, event) { if (!err) deleted.push({uuid: elem.uuid}); }); } else […]

node.js – 同步执行命令并得到结果

我试图在node.js中同步执行一个child_process(是的,我知道这是不好的,我有一个很好的理由),并检索标准输出上的任何输出,但我不明白如何… 我发现这个SO后: node.js同步执行系统命令 ,描述如何使用库(node-ffi)来执行命令,这很好,但我唯一能得到的是进程退出代码。 该命令执行的任何数据都直接发送到标准输出 – 我如何捕获这个? > run('whoami') username 0 换句话说, username是echo'd到标准输出, run的结果是0 。 我宁愿弄清楚如何读取标准输出

如何在node.js中使用express来使用Promise?

我使用Express来使用Promise。 router.post('/Registration', function(req, res) { var Promise = require('promise'); var errorsArr = []; function username() { console.log("agyaaa"); return new Promise(function(resolve, reject) { User.findOne({ username: req.body.username }, function(err, user) { if(err) { reject(err) } else { console.log("yaha b agyaaa"); errorsArr.push({ msg: "Username already been taken." }); resolve(errorsArr); } }); }); } var username = username(); console.log(errorsArr); […]

Node.js:node.js中的http.get方法是否有同步版本?

node.js中有没有同步版本的http.get方法? 就像是: http.getSync({ host: 'google.com', port: 80, path: '/' }, function(response){ }); console.log(response) 有时候这会非常有用。

Node.js同步与asynchronous

我目前正在学习node.js,我看到2个同步和asycn程序(同一个)的例子。 我明白一个callback的概念,但我试图理解第二个(asynchronous)的例子的好处,因为它们似乎是两个正在做同样的事情,即使这种差异… 你能否详细说明为什么第二个例子会更好? 我会很乐意得到更广泛的解释,这将有助于我理解这个概念。 谢谢!! 第一个例子: var fs = require('fs'); function calculateByteSize() { var totalBytes = 0, i, filenames, stats; filenames = fs.readdirSync("."); for (i = 0; i < filenames.length; i ++) { stats = fs.statSync("./" + filenames[i]); totalBytes += stats.size; } console.log(totalBytes); } calculateByteSize(); 第二个例子: var fs = require('fs'); var count = 0, totalBytes […]