Tag: javascript

Node.js – 等待多个asynchronous调用

我试图在渲染一个Jade模板之前进行多个MongoDB查询,但是我无法完全弄清楚如何在呈现模板之前等待所有的Mongo查询完成。 exports.init = function(req, res){ var NYLakes = {}; var NJLakes = {}; var filterNY = {"State" : "NY"}; db.collection('lakes').find(filterNY).toArray(function(err, result) { if (err) throw err; NYLakes = result; }); var filterNJ = {"State" : "NJ"}; db.collection('lakes').find(filterNJ).toArray(function(err, result) { if (err) throw err; NJLakes = result; }); res.render('explore/index', { NYlakes: NYLakes, NJlakes: NJLakes } ); […]

如何用Node.jspipe理多个JS文件服务器端

我正在使用Node.js进行一个项目,服务器端代码变得足够大,我想将它分成多个文件。 看起来,这已经完成了很长时间的客户端,开发是通过为每个文件插入一个script标签来完成的,而只是为了分发就像是用来把所有东西放在一起的东西。 我意识到在concatting所有的服务器端代码是没有意义的,所以我不问如何做到这一点。 我能find的最接近的东西是require() ,但它不像浏览器中的script那样需求文件不共享通用名称空间。 看看一些较老的Node.js项目,比如Shooter ,看起来这种情况并非如此,或者我在代码中丢失了一些非常简单的东西。 我的require'd文件不能在编译时访问全局调用名称空间,也不能运行时。 有没有简单的方法呢,还是我们不得不使所有的需求JS文件完全独立于调用范围?

如何链接和分享先前的结果与承诺

我正在使用蓝鸟库,需要进行一系列的HTTP请求,并需要一些响应数据到下一个HTTP请求。 我已经构build了一个处理我的请求callhttp()的函数。 这需要一个URL和一个POST的正文。 我这样称呼它: var payload = '{"Username": "joe", "Password": "password"}'; var join = Promise.join; join( callhttp("172.16.28.200", payload), callhttp("172.16.28.200", payload), callhttp("172.16.28.200", payload), function (first, second, third) { console.log([first, second, third]); }); 第一个请求获取需要传递给第二个请求的API密钥等等。 如何从第一个请求获取响应数据? UPDATE 这是callhttp函数: var Promise = require("bluebird"); var Request = Promise.promisify(require('request')); function callhttp(host, body) { var options = { url: 'https://' + host […]

node.js是否支持“let”语句?

node.js是否支持类似于MDN上描述的let语句? ? var x = 8, y = 12; let ( x = 5, y = 10) { return x + y; } //15 如果没有,有没有办法用自动执行的匿名函数或其他东西来复制function? 和/或有另一个JS环境 已经let和和 有节点的REPL吗? 犀牛? 编辑 : 这个问题在很久以前就被问到了。 截至目前,2015年底,答案是“是的,是的”。 在io.js 3.3中默认包含了和谐特性,并且最近被4.x版本带回到了node.js。

当缓冲使用streampipe道时,节点回应服务器的性能下降10倍

在节点v8.1.4和v6.11.1上 我从下面的回声服务器实现开始,我将其称为pipe.js或pipe 。 const http = require('http'); const handler = (req, res) => req.pipe(res); http.createServer(handler).listen(3001); 我用wrk和下面的lua脚本(简写为简称)进行了基准testing,将发送一个小的身体作为有效载荷。 wrk.method = "POST" wrk.body = string.rep("a", 10) 在每秒2k个请求和平均延迟为44ms的情况下,性能不是很好。 所以我写了另一个使用中间缓冲区的实现,直到请求完成,然后写出这些缓冲区。 我将这个称为buffer.js或缓冲区 。 const http = require('http'); const handler = (req, res) => { let buffs = []; req.on('data', (chunk) => { buffs.push(chunk); }); req.on('end', () => { res.write(Buffer.concat(buffs)); res.end(); }); […]

Javascript中的括号括起来

Javascript是什么让我可以在这样的函数调用中使用倒置/倒退括号? 我正在CLI的Node控制台上运行; 特别是节点版本0.10.25。 function a(){ return 42 } a() // -> 42 a)( // -> 42. WTF? function b(t){ return t } b(4) // -> 4 b)4( // No function evaluation; presumably dangling parentheses b)(4 // -> 4. WTF? 附录:这在Chrome 33.0.1750.152,Safari 7.0.2或Firefox 27.01中似乎不起作用。 这实际上是某种ECMAScript解释的“特征”,还是一个节点的特性? 如果节点使用V8,不应该与Chrome结果相匹配吗?

JavaScript BDD:Vows&Kyuri VS. 茉莉花

我本来要和Vows和Kyuri一起去,但后来我发现了Jasmine 。 你推荐哪个? 誓言还是茉莉花? 是否有一个与Jasmine一起工作的Cucumber实现?

何时使用Meteor.methods和利用存根

使用meteor,我试图了解何时使用服务器端Meteor.methods()同时仍然保持即时UI更新。 从Andrew Scala的入门教程中 ,他声称当你想更新和修改你的数据库文档时应该使用Meteor.methods() : 这个想法是,你定义了服务器上的所有function,如修改和更新数据等危险的东西,然后让客户端调用这些function,并得到像常规函数的返回值。 客户从来没有看到实施,也不亲自修改数据。 服务器完成所有工作。 遵循这个build议,我在我的代码中实现了这个: 服务器端: Meteor.methods({ addMovie: function(data) { var movie = Movies.insert({name: data}); return movie; }, … 客户端: Template.movies.events = ({ 'click #add-movie': function(e) { var name = document.getElementById('movie-name').value; Meteor.call('addMovie', name); return false; }, … 这有效,但速度很慢。 如果您在客户端调用Movies.insert() ,UI将不会立即更新。 文档指出,为了纠正这个问题,你可以在客户端创build存根: 客户端调用方法定义了与同名服务器方法相关的存根函数。 如果你不想要,你不必为你的方法定义一个存根。 在这种情况下,方法调用就像其他系统中的远程过程调用一样,您将不得不等待来自服务器的结果。 但是这些存根应该是什么样的? 它应该基本上看起来像服务器端方法一样吗? 如果是这样,那有什么意义呢? 我正在寻找Meteor.methods()的用法和目的的更全面的解释,存根的使用和使用,以及它们的实现。 编辑:大卫格林斯潘已经帮助澄清Meteor.methods()和stream行谈话的存根(stub)的使用。

我怎样才能使用NPM的前端依赖?

我想问一下是否有可能(通常是一个好主意)使用npm来处理前端依赖(Backbone,jQuery)。 我发现Backbone,jQuery等都可以通过NPM,但我将不得不设置另一个提取点(默认是node_modules )或符号链接或其他… 有人做过这个吗? 可能吗? package.json有什么需要改变的地方?

Node.js:从请求获取path

我有一个名为“localhost:3000 / returnStat”的服务应该以文件path为参数。 例如'/BackupFolder/toto/tata/titi/myfile.txt'。 我如何在我的浏览器上testing这项服务? 如何使用Express格式化此请求? exports.returnStat = function(req, res) { var fs = require('fs'); var neededstats = []; var p = __dirname + '/' + req.params.filepath; fs.stat(p, function(err, stats) { if (err) { throw err; } neededstats.push(stats.mtime); neededstats.push(stats.size); res.send(neededstats); }); };