Tag: 范围

这段代码似乎没有按顺序开火?

我的问题是,代码似乎没有按顺序运行,如下所示。 这个代码是我创build的discord.js机器人。 var Discord = require("discord.js"); var bot = new Discord.Client(); var yt = require("C:/Users/username/Documents/Coding/Discord/youtubetest.js"); var youtubetest = new yt(); var fs = require('fs'); var youtubedl = require('youtube-dl'); var prefix = "!"; var vidid; var commands = { play: { name: "!play ", fnc: "Gets a Youtube video matching given tags.", process: function(msg, query) { […]

返回使用nodejs抓取网页的url

我正在尝试构build一个简单的Web应用程序,使用nodejs及其2个模块请求和cheerio来抓取网站。 我设法用下面的代码来完成它: var printURL=function(url){ request(url, (function() { return function(err, resp, body) { if (err) throw err; $ = cheerio.load(body); $('img').each(function(){ console.log($(this).attr('src')); }); } } )()); }; 它在网站上打印图片的URL是正常的,但我真正想要做的是创build一个我可以在函数外部使用的url列表。 我试过这样,但它返回一个空的列表: var urlList=[]; var printURL=function(url){ request(url, (function() { return function(err, resp, body) { if (err) throw err; $ = cheerio.load(body); $('img').each(function(){ urlList.push($(this).attr('src')); }); } } )()); }; 我怎样才能解决这个问题? […]

范围问题在node.js的循环中调用一个callback函数

在这个线程glproo的帮助下,我构build了这个代码: for(var i=0;i<datos.length;i++){ bittrex.getticker(datos[i].Currency, function(err, data){ if (err){ console.log('ERROR:', err); return 'ERROR:'+ err; } else { if (data.message!='INVALID_MARKET') { this.LasValueBTC=data.result.Last; } else { this.LasValueBTC=''; } } }.bind(datos[i])); } 问题是,外部callback函数datos数组没有更新…因为它是写在这一刻,如果我console.log(这个)里面的function伟大的工作和this.LastValueBTC存在于我的JSON,但function之外如果我console.log(datos)循环后,LastValueBTC不存在..我需要做一个res.send(datos)后循环..

使用范围保护API(oauth2orize,passport,express,Nodejs)

我正在尝试使用node / express创build一个API,并使用Passport和oauth2orize来保护它。 我有API的工作,我有oauth2的东西工作,但我似乎无法弄清楚如何实现与范围保护API方法。 oauth2orize标记hander-outer: server.exchange(oauth2orize.exchange.password(function (client, username, password, scope, done) { scope = scope || ['unauthorized']; db.collection('oauth_users').findOne({username: username}, function (err, user) { if (err) return done(err); if (!user) return done(null, false); for (i in scope) if(user.scope.indexOf(scope[i]) < 0) return done(null, false); bcrypt.compare(password, user.password, function (err, res) { if (!res) return done(null, false); var token […]

节点和Chrome中的块范围内的const(V8)

我写了一个nodejs(v4.2.4)应用程序,我遇到了一些奇怪的行为。 function A(number) { this.number = number; } for(var i = 0; i < 3; i++) { const a = new A(i); console.log(a.number); } const b = new A(99); console.log(b.number); 我的直觉,来自Java(和FireFox),是输出应该是 0 1 2 99 但是,Node(和Chrome)给了我 0 0 0 99 我从MSN的调查和了解块范围 ,该var在JavaScript中没有块范围。 进一步来看 , MSN – const将const声明描述为具有块范围: 常量是块范围的,就像使用let语句定义的variables一样。 一个常量的值不能通过重新赋值而改变,并且不能被重新声明。 在这种情况下,我会说Node和Chrome(在这种情况下可能是V8),在块范围中有一些对const的阴暗处理。 但他们也写这个 这个声明创build一个常量,它可以是声明它的函数的全局或局部的。 这是否意味着V8将每个const声明作为一个全局variables,而FireFox创build一个本地variables? 怎么可能这样重要的东西实现如此不同呢?

Node.js全局评估,引发ReferenceError

我正在尝试从Rhino书籍学习JavaScript。 我试图从书中执行以下关于eval() 。 我正在使用node.js(v0.10.29)来执行示例。 var geval = eval; // aliasing eval to geval var x = 'global'; // two global variables var y = 'global'; function f () { var x = 'local'; // define a local variable eval('x += "changed";'); // direct eval sets the local variable return x; } function g () { […]

vars在Nodejs中存储在哪里?

在任何Web浏览器中执行以下脚本都会导致'wee'被发送到控制台。 在节点中发送{} 。 var d = 'wee'; console.log(this.d); 我意识到,在这种情况下, this指的是导出对象。 我知道globalvariables,这不是我想要访问的。 另外,上面的脚本也没有在全局对象上设置d 。 它到底在哪里? 我可以通过console.log(d);明确地访问它console.log(d); 在上面的脚本中,但似乎没有任何理由,在一些非标准的空间里隐藏起来。 我也意识到,删除var会在global对象上声明d ,这是预期的行为,尽pipe在顶级作用域将其值存储在与“裸”variables不同的位置上的var看起来很愚蠢。 我的意思是,模块系统应该是防止全球污染的一种数字预防措施。 这里打破这个模式似乎很容易,做一些标准是很困难的。 d也没有在module对象上声明。 我没有理由为什么我要问这个问题,但我会回答第一个巨魔来与“但为什么你想做的durrrr”。 var d = {}; d.bleep = 'y'; var a = Object.keys(d); d.bloop = 'y'; d.blop = 'y'; var b = Object.keys(d); // c = b – a; var c = b.filter(function (item) { […]

如何将socket.io(在nodejs中)的事件处理程序绑定到我自己的作用域?

我在我的nodejs服务器中使用“socket.io”。 有没有办法在我的类/模块(在浏览器)范围内运行注册的事件function? … init: function() { this.socket = new io.Socket('localhost:3000'); //connect to localhost presently this.socket.on('connect', this.myConnect); }, myConnect: function() { // "this.socket" and "this.f" are unknown // this.socket.send({}); // this.f(); }, f: function() { // … } …

Nodejs EventEmitter – 定义侦听器函数的作用域

我想有这样的工作: var Events=require('events'), test=new Events.EventEmitter, scope={ prop:true }; test.on('event',function() { console.log(this.prop===true);//would log true }); test.emit.call(scope,'event'); 但不幸的是,听众甚至没有被叫到。 有没有办法做到这一点与EventEmitter? 我可以Function.bind给侦听器,但是,我真的希望EventEmitter有一些特殊的(或明显的)方法来做到这一点… 谢谢您的帮助!

什么是NodeJS中的“全局”对象

我刚刚在NodeJS环境中看到了this关键字的奇怪行为。 我用代码列出他们。 我已经用NodeJS v6.x和一个JavaScript文件运行这个代码。 在使用一行代码进行testing时,无论是否使用'use strict'语句,都会指向一个空对象{} 。 console.log(this) 但是,当我在一个自我执行的函数内运行这个语句时, (function(){ console.log(this); }()); 这是打印一个真正的大对象。 在我看来, NodeJS环境创build的全局执行上下文对象。 在'use strict'语句执行上述function的同时,预计打印undefined (function(){ 'use strict'; console.log(this); }()); 但是,在使用浏览器(我只使用Chrome进行testing)的同时,前三个例子产生window对象,最后一个undefined按预期undefined 。 浏览器的行为是可以理解的。 但是,在NodeJS情况下,它不会创build执行上下文,直到我包装在一个函数内? 那么, NodeJS大部分代码都运行一个空的全局 object ?