Articles of 作用域

JavaScript和Node.JS – 无法理解为什么variables在callback中是未定义的

所以我开始学习NodeJS,并创build一个简单的HTTP服务器,如“Node Beginner”中所述。 我有一个Router对象,它包含一个路由table ,它将path名映射到要调用的函数。 这是通过一个关键值对象来实现的。 现在,我的Server对象有一个指向上述对象的router成员。 (对于松耦合,保持路由器和服务器分离),以及start()服务器的start()方法。 如下所示: Server.prototype.start = function() { var myRouter = this.router; http.createServer(function(req, res) { var path = url.parse(req.url).pathname; res.write(myRouter.route(path, null)); res.end(); }).listen(80); }; 现在我创build了一个myRoutervariables,它指向Server对象的router引用,然后在createServer函数中使用它的route()函数执行路由。 此代码工作。 但是,如果我省略创buildmyRoutervariables部分,并直接在createServer执行路由,如下所示: res.write(this.router.route(path, null)); 它说this.router是不确定的。 我知道这与范围有关,因为提供给createServer的函数稍后在接收到请求时执行,但是,我无法理解创buildmyRouter如何解决此问题。 任何帮助将不胜感激。

无法将函数的结果传递给node.js中的全局作用域

我正在使用image-scraper包的node.js来search与给定searchstring相关的图像。 该包会正确返回结果数组。 我试图将该数组的一个元素(图像的url)传递给一个variables,我可以通过全局范围在另一个包中使用该variables。 这是我的代码: var Scraper = require ('images-scraper') , bing = new Scraper.Bing(); bing.list({ keyword: 'search string here', num: 1, detail: true }) .then(function (res) { console.log('url of image result', res[0]['url']); global.url_result = res[0]['url']; }).catch(function(err) { console.log('err',err); }) console.log('array',global.url_result); 该软件包的工作原理 – 控制台在被告知将其打印到函数中的控制台时,将返回res[0]['url']图像的URL,但是该函数之外的控制台日志会返回未定义的global.url_result 。 有关如何在函数之外实现对结果的访问的任何build议? 如果我不应该使用全球范围,最好的办法是什么? 提前致谢。

改变函数的variables,并保持它的JavaScript?

我如何写这个,让lfmuser保持在UserModel.find()调用的函数中所做的更改? 如果我可以避免的话,我真的不需要将非常大的一段代码移动到每个块中。 var np_handler = function (act) { var lfmuser = ''; if (act.params.length === 0) { UserModel.find({ nick: act.nick }, function (err, data) { if (!data) { lfmuser = act.nick; } else { lfmuser = data.lastfm; } }); } else { UserModel.find({ nick: act.params[0] }, function (err, data) { if (!data) { lfmuser = […]

失去全球variables价值

这是一个游戏应用程序,我声明的variablesskipnpc被devise为一个非玩家angular色已经使用轮到他的行为的任何AI代码跳过一段时间的指标。 我有的问题是我失去skipnpc的价值不知何故,我指出在console.log命令我的问题是关系到可变范围,但我不明白如何解决它。 function npcMovement() { skipnpc = false;… sql4 = "SELECT id FROM game_moblist WHERE spawn_id =" + spawnid + " AND posx=" + parseInt(mobpathx[mobpathx.length – 1]) + " AND posy=" + parseInt(mobpathy[mobpathy.length – 1]) connection.query(sql4, function (err, send, fields) { console.log("skipnpc pathing") io.sockets.emit('groupmoveresult', send, parseInt(mobpathx[mobpathx.length – 1]), parseInt(mobpathy[mobpathy.length – 1])) skipnpc = true console.log("skipnpc=true:" […]

函数不返回值:范围问题

需要第二双眼睛…发现有什么不对吗? 我的内在函数不返回值。 我一定在搞范围了吗? function getGroups(account){ var name; // name = 'assigned'; I work account.getGroups(function(err, groups) { //removed logic for simple debugging name ='test'; //return name; }); return name; } 当在父函数中分配variables,即var name = 'assigned'它可以工作。

将节点模块variables注入到作用域

是否有可能使用节点模块来实现这种行为? module.js: module.exports = function () { var test.fn = function () { console.log("$test.fn()"); } var test.fn2 = function () { console.log("$test.fn2()"); } var variable = "test"; }; app.js: require("./module.js")(); test.fn(); test.fn2(); otherFunction(variable); 我不想做这样的事情$ = require("./module.js")(); $.test.fn(); $ = require("./module.js")(); $.test.fn(); 我想注入这个variables到app.js作用域没有包装variables。 编辑: 我已经结束了使用这个: module.js: module.exports = function () { eval(String(inject)); var inject = ( […]

NodeJS:代码优化和variables范围

真正新到纯JavaScript编程,我只是想知道如何优化下面的冗余代码: module.exports = function(app, express) { var router = express.Router(); router.get('/', function (req, res, next) { var db = req.db; var collection = db.get('projects'); var projects = collection.find({}, {}, function(e, docs){ res.json({ success: true, message : 'ok', projects: docs }); }); }); router.get('/:id', function (req, res, next) { var db = req.db; var collection = […]

JavaScript / Node.JS中的variables声明和初始化

我在JavaScript中看到了不同的编码格式/样式的build议。 其中之一就是省略, 在每一行的结尾,除非在JSON对象中使用。 另一种是只使用var来声明variables并缩进第二个variables。 我通过了这两个build议,这使我有一个有趣的错误,我想深入了解这个问题。 初始化 var max = 2 arr = [] wait = 10 //Preset arr with simple object {id:i} for(var i = 0; i < max; i++) arr.push({id:i}) 主function function simulate(idIn, callback) { var msg = idIn id = idIn logger.info(idIn, 'simulate', JSON.stringify({id:id, idIn:idIn})) setTimeout(function() { var obj = {id:id, idIn:idIn} logger.info(idIn, […]

JavaScript范围错误函数返回函数

这是我的function的简化版本。 问题是我在警报中都得到两次。 我相信这是一个可变范围的问题,但我似乎无法弄清楚。 var someObj = {"a" : 1, "b" : 2}; function getData(obj){ var bunchOfFunctions = {}; for(var key in obj){ value = obj[key]; bunchOfFunctions[key] = function(){ alert(value); } } return bunchOfFunctions; } var functs = getData(someObj); for(var key in functs){ functs[key](); } 这里是一个jsfiddle.net/earlonrails/q4d66/

Node.js模块级variables是未定义的

我有一个问题访问模块级别variables范围内的一个函数内的模块。 见下文… var socketio = require('socket.io'); var socket = socketio.listen(); var myCustomModule = require('./lib/mycustommodule')('http://mysite:8080'); socket.on('connection', function connection(socket) { socket.emit('message', {data:"test1"}); <====THIS WORKS socket.on('init', function init(data) { socket.emit('message', {data:"test1"}); <====THIS WORKS refreshMyCustomModule(); }); }); var refreshMyCustomModule = function() { socket.emit('message', {data:"test1"}); <=====THIS DOESN'T WORK myCustomModule.beginSomeAsyncTask(function(data) { <======THIS DOESN'T WORK socket.emit('message', {data:"test2"}); <========THIS DOESN'T WORK }); }; […]