Articles of 作用域

应用程序不改变范围

我想使用JavaScript .apply方法来编译Node.js节点的函数。 thrift .js文件的代码如下所示: … var NimbusClient = exports.Client = function(output, pClass) { this.output = output; this.pClass = pClass; this.seqid = 0; this._reqs = {}; }; NimbusClient.prototype = {}; NimbusClient.prototype.getClusterInfo = function(callback) { this.seqid += 1; // line where error is thrown [0] this._reqs[this.seqid] = callback; this.send_getClusterInfo(); }; … 我的服务器文件看起来如下所示: var thrift = require('thrift') , […]

node.jscallback获取variables的意外值

我有一个for循环,里面有一个variables赋值为var。 在循环内部也调用一个需要callback的方法。 在callback函数里我使用了循环中的variables。 我期望它的价值,在callback函数内,将是相同的,因为它是在该循环迭代期间的callback。 然而,它总是似乎是循环的最后一次迭代的价值。 我误解了JavaScript的范围,还是有其他的错误? 这里讨论的程序是一个node.js应用程序,它将监视工作目录的更改,并在find服务器时重新启动服务器。 我将包括所有好奇的代码,但重要的是parse_file_list函数。 var posix = require('posix'); var sys = require('sys'); var server; var child_js_file = process.ARGV[2]; var current_dir = __filename.split('/'); current_dir = current_dir.slice(0, current_dir.length-1).join('/'); var start_server = function(){ server = process.createChildProcess('node', [child_js_file]); server.addListener("output", function(data){sys.puts(data);}); }; var restart_server = function(){ sys.puts('change discovered, restarting server'); server.close(); start_server(); }; var parse_file_list = […]

express.js中的中间件function的范围

我正在学习express.js / node.js,并对JavaScript原型模型有一个很好但不是很好的理解。 因此,我对中间件可以用express.js的路由机制进行堆叠的方式感到困惑。 说我们有这个代码 function andRestrictTo(role) { return function(req, res, next) { req.authenticatedUser.role == role ? next() : next(new Error('Unauthorized')); } } app.del('/user/:id', loadUser, andRestrictTo('admin'), function(req, res){ res.send('Deleted user ' + req.user.name); }); 由于和RestrictTo(angular色)返回一个中间件,它得到在路由链中执行 – 我明白了。 然而: req,res,next参数在返回函数中来自哪里? 我想这个“连锁店”是排队的,并且对参数进行了调整,但是对于更深入的理解,这有些太模糊了。 作为下一个参数引发的错误发生了什么? 错误是否会破坏中间件链? 如果我想将限制机制打包到一个单独的文件/模块(如安全框架),那将如何完成? 这将是很酷,如果有人可以指出基本的想法:)

Node.js和客户端共享相同的脚本

使用Node.js的一个理论好处是可以在客户端和服务器之间共享相同的脚本。 如果客户端不支持JavaScript,那么这将使服务器可以降低相同的function。 然而,Node.js require()方法是自己的。 在你加载的脚本中,你可以添加一些东西到this或者exports ,稍后在获取脚本的对象中可用: var stuff = require('stuff'); stuff.show(); 在stuff.js中: this.show = function() { return 'here is my stuff'; } 所以,在客户端重新使用这个脚本时, .show()方法将被添加到window范围中。 这不是我们想要的,而是我们想将其添加到自定义名称空间。 到目前为止,我唯一的解决scheme就像(在stuff.js中): var ns = typeof exports == 'undefined' ? (function() { return window['stuff'] = {}; })() : exports; ns.show = function() { return 'here is my stuff'; } delete ns; […]

Node.jsvariables声明和范围

当我在node.js中input时,我得到了undefined 。 var testContext = 15; function testFunction() { console.log(this.testContext); } testFunction(); =>undefined 没有var关键字,它通过(=> 15)。 它在Chrome控制台中工作(使用和不使用var关键字)。