Articles of 范围

Javascript – 从外部调用variablesIf / Else Block返回未定义

我认为这是如何在if / else块全局内部创build一个variables(案例3)。 connection.query(sql, function (err,rows){ //Handle Errors if(err){ //Log The Error & Die } //If Successful – Log Results For Now (Change To Export Results) else { //console.log(rows); foo = rows; } }); console.log(foo); // Out: undefined 为什么我不能访问函数之外的variables? 解 那么这里的问题就是理解什么是asynchronous性 。 与@AmmarCSE聊天后, 在这里看到这个伟大的问题,所以我明白,我的结构我的问题(和我的代码,显然)不正确。 我试图访问一个未定义的variables,直到函数完成运行(对远程数据库的SQL查询显然需要更长时间才能完成,然后运行本地脚本)。 但是,如果我以asynchronous方式构build代码, 只有在函数完成后才会调用该variables。 事实certificate,这不是variables范围的问题,而是variables定义时间的问题 (不知道这是否是在variables被定义的脚本中的正确术语 – CS专业,随意编辑正确的术语)。 无论如何,这是新的代码: runSQL(function(result){ //Do Whatever […]

JavaScriptvariables范围/提升问题

我有一些非常混淆的问题,从原始文件中设置本地后,从另一个文件中获取variables。 我知道这与吊装有关,但经过一段时间的研究,没有运气,我认为这是值得在这里问。 我试图从我的文件sequencer.js像这样获取设置element : var nxloader = require('../../helpers/nxloader'); // Load matrix var matrix = nxloader.load('matrix').getElement(); console.log(matrix); 从设置variables的文件nxloader.js如下所示: var $ = require('jquery'); /** * Variable to hold the element that is loaded. */ var element = 'test'; /** * Constructor * * @returns {nxloader} instance of itself */ var nxloader = function () { return this; […]

在模块内的节点的全局范围中评估代码

一般:在node.js中,如何访问正在执行的文件的作用域? 例如:我有一个模块(mod.js)和一个需要它的文件(main.js)。 从mod.js中我需要做一个eval()来访问main.js的作用域,如下所示: mod.js: exports.runCode = function(code) { var x = 1; // do some stuff to x and code return eval(code) + x; } main.js: var amod = require('./mod'); var func = function(a,b) { return a + b; } console.log(amod.runCode('2+2')); // works fine console.log(amod.runCode('func()')); // ReferenceError: func is not defined 庆典: $ node main […]

如何从外部函数更新对象?

挣扎着这种mongoosefunction。 我正在尝试在另一个embedded对象中添加一个embedded对象,但是它将新的出价对象添加到错误的地方 – 为我的迭代器创build的新列表variables。 我for循环试图find确切的清单更新,所以我认为分配他们的行动是搞砸了他们。 例如,如果列表是users[2].listings[10].bids ,那么我怎样才能到达那个对象,以便更新它呢? function create(req, res) { db.Listing.findById(req.params.listingId, function(err, foundListing) { // console.log(foundListing._id ); if (err) { console.log('Error', err); } // res.json(foundListing); // get array of all users db.User.find({}, function(err, users) { // for loop iterates through all users' listings for (let i = 0; i < users.length; i++) { let […]

在Javascript中通过variables作用域来维护variables

我在使用我正在创build的Node.js应用程序来处理variables作用域时遇到了困难,通常我知道variables作用域在函数中(在这种情况下,匿名callback函数)是如何工作的。 我所争论的是通过匿名callback的链/孔维护可变参数的最佳方式是什么 ? 在通常情况下,我可以将variables传递给函数,但是因为我正在使用mongoose(mongodb ORM),所以我不能在自己的variables中传递,所以不得不求助于每次更深入地定义variables回电话。 这样做的最好方法是什么? 下面是我的代码,我最终得到的variables未定义的时间,我想用他们的tweeting: var userBid = tag.user; User.find({id: userAid}, function(err, userA){ if (err) {console.log("Error getting user A for tweeting ", err)} else { var userAName = userA.twitter.screenName; var userBid2 = userBid; User.find({id: userBid2}, function(err, userB){ if (err) {console.log("Error getting user B for tweeting ", err)} else { var action = "@"+ […]

在使用socket.io的node.js中,如何dynamic添加到套接字侦听器?

如果有标准的socket.io设置: var app = require('http').createServer().listen(80,'127.0.5.12'), io = require('socket.io').listen(app); session = require('./local_modules/session.js'); // creating a new websocket to keep the content updated without any AJAX request io.sockets.on('connection', function(socket) { // session, login, logout socket.on( 'session', session.session.bind(socket) ); socket.on( 'login', session.login.bind(socket) ); socket.on( 'logout', session.logout.bind(socket) ); // what to add new listener here! }); 稍后在程序中,一旦知道它想做什么,它希望为套接字侦听器添加新的function。 例如,在“会话”中间,可能希望添加“新事物”: exports.session […]

导出一个节点模块作为唯一的实例

我正在使用restify在节点中编写一个基本的REST API框架。 为了支持这个,我有几个帮助对象,我导出和要求。 我无法理解如何以这样一种方式要求这些对象,即每个传入的HTTP请求使用唯一的助手对象实例。 实际上,我需要()模块在GET请求的范围之内,但是我觉得这不是最好的做法。 例如: helper.js var helper = function(){ this.foo = new Date().getTime(); return this; }; helper.prototype.test = function(){ return new Date().getTime(); }; module.exports = new helper(); main.js app.get("/", function(req, res){ var helper = require("./helper"); helper.test(); }); helper.test()工作原理:每个传入的请求都有它自己的帮助程序的作用域实例。 如果我需要请求范围之外的帮助程序文件,则由于节点caching所需文件的对象的方式,帮助程序对象内的数据将在请求之间共享。 但是,在这种情况下,helper.foo对于每个调用都是一样的,大概是因为require()调用通过“new”关键字接收1个实例。 我遇到这个问题时,我有一个帮助函数,使用随机string命名文件,但因为我已经声明它像(下),所有的文件被命名为相同的。 helper.prototype.fileName = random(10) + ".json"; 在请求范围内是否需要文件会产生任何负面影响? 我会想象,当处理高频率stream量时,对于每个呼叫请求文件都不是理想的。 当通过express或restify考虑多个传入的HTTP请求时,需要/导出模块的最佳实践是什么? 我应该确保我写的帮手不处理这些边缘情况吗?

NodeJS Express app.locals不能直接在函数中访问

这是一个奇怪的问题,但跟着我。 我有一个具有快速应用程序的nodejs服务器。 在应用程序中,我设置我的本地人如下: var moment = require('moment'); app.locals.moment = moment; ejs被呈现为: exports.page = function (req, res) { res.render('first-page'); }; 然后,在我的ejs中,我有以下代码: <% if (!moment) { throw new Error('moment is not defined'); } function formatDate(date) { return moment(date).format(); } %> <p><%= formatDate(1435856054045); %></p> 发生的有趣之处在于那一刻不会引发exception。 因此,正如文献所说,它在ejs的范围内定义。 然而,ejs说在formatDate没有定义时刻的exception。 如果我将formatDate更改为以下,一切正常。 function formatDate(date) { return locals.moment(date).format(); } 我的问题是ejs中定义的函数是如何确定的,以及哪些上下文适用于它们。 ejs是否将一个不同的上下文应用于浮动JavaScript? 我假设它做了一些像formatDateFunctionPointer.call(ejsScope, …);

多次asynchronous调用后callback?

我正在使用Gmail API检索循环中的邮件,并为每条邮件执行req.write()。 每个api调用都有一个callback函数,但是如何知道整个集合是什么时候完成的,以便我可以结束响应? 我尝试了以下,但注意到,callback没有按照数组索引的顺序执行,所以我不能只是做我注释的线。 for (var i = 0; i < messages.length; i++) { var message = messages[i]; console.log('- %s', message.id); (function(e){ var request = gmail.users.messages.get({ auth:auth, id:message.id, userId: 'me' }, function(err, response) { if(err) { console.log('API returned an error: ' +err); return; } res.write(JSON.stringify(response,null,'\t')); console.log(e); //if(e==messages.length-1) res.end(); } ); })(i); }

我如何将范围传递给node-mysql中的callback?

我得到一个client is not defined错误,出以下代码: var mysql = require('mysql'); var conf = { 'database':'database', 'user':'user', 'password':'password' }; function mysqlQuery(mysql, conf, query, callback) { var client = mysql.createClient({ user:conf.user, password:conf.password }); client.query('USE ' + conf.database, function () { client.query(query, callback); }); } mysqlQuery( mysql, conf, 'SELECT * FROM users;', function selectCb(err, results) { if (err) { throw […]