在我问起之前我app.router想我应该至少解释一下我在使用中间件时的想法.要使用中间件,要使用的功能是app.use().当中间件被执行时,它将通过使用next()或调用下一个中间件来调用,因此不再调用中间件.这意味着我放置中间件调用的顺序很重要,因为某些中间件依赖于其他中间件,而某些中间件甚至可能甚至都没有被调用.
今天我正在处理我的应用程序并让我的服务器在后台运行.我想进行一些更改并刷新页面并立即查看更改.具体来说,我正在改变我的布局.我无法让它工作,所以我搜索了Stack Overflow的答案并找到了这个问题.它说要确保它express.static()在下面require('stylus').但当我查看OP的代码时,我看到他app.router在他的中间件调用结束时接到了他的电话,我试图找出原因.
当我创建我的Express.js应用程序(版本3.0.0rc4)时,我使用了该命令,express app --sessions --css stylus并在我的app.js文件中设置了app.router上面的代码express.static()和require('stylus')调用代码.所以看起来,如果它已经设置了那样,那么它应该保持这种方式.
重新安排我的代码后,我可以看到我的Stylus更改,它看起来像这样:
app.configure(function(){
//app.set() calls
//app.use() calls
//...
app.use(app.router);
app.use(require('stylus').middleware(__dirname + '/public'));
app.use(express.static(__dirname + '/public', {maxAge: 31557600000}));
});
app.get('/', routes.index);
app.get('/test', function(req, res){
res.send('Test');
});
Run Code Online (Sandbox Code Playgroud)
所以我决定第一步是找出为什么app.router在我的代码中有重要性.所以我评论了它,开始我的应用程序并导航到/.它显示我的索引页面就好了.嗯,也许它有效,因为我从路线文件(routes.index)导出路由.接下来我导航到/test屏幕上显示Test.哈哈,好的,我不知道是什么app.router.无论它是否包含在我的代码中,我的路由都很好.所以我肯定错过了一些东西.
所以这是我的问题:
有人可以解释一下app.router它的重要性,它的重要性,以及我应该把它放在我的中间件调用中的哪个位置?如果我得到一个简短的解释,那也很好express.static().据我所知,express.static()是我的信息缓存,如果应用程序找不到请求的页面,它将检查缓存以查看它是否存在.
我正在尝试运行查询以检查列是否自动递增.我可以检查类型,默认值,它是否可以为空等等,但我无法弄清楚如何自动递增测试.这是我如何测试其他东西:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'my_table'
AND COLUMN_NAME = 'my_column'
AND DATA_TYPE = 'int'
AND COLUMN_DEFAULT IS NULL
AND IS_NULLABLE = 'NO'
--AND AUTO_INCREMENTS = 'YES'
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有AUTO_INCREMENTS可比较的列.那么如何测试列自动递增?
请考虑以下PHP代码:
//Method 1
$array = array(1,2,3,4,5);
foreach($array as $i=>$number){
$number++;
$array[$i] = $number;
}
print_r($array);
//Method 2
$array = array(1,2,3,4,5);
foreach($array as &$number){
$number++;
}
print_r($array);
Run Code Online (Sandbox Code Playgroud)
两种方法都完成相同的任务,一种是通过分配引用而另一种是通过基于密钥重新分配来完成.我想在我的工作中使用优秀的编程技术,我想知道哪种方法是更好的编程实践?或者这是其中一个并不重要的事情?
在node.js和express中,有很多示例显示如何获取会话数据.
正如您在访问第3个链接时所看到的,它是指向StackOverflow的链接.有一个很好的答案,但正如@UpTheCreek在那些评论中指出的那样,connect不再具有parseCookie方法.我也遇到过这个问题.我发现的所有教程都使用connect的parseCookie方法,现在这个方法不存在.所以我问他如何获取会话数据,他说他不知道最好的方法,所以我想我会在这里发布问题.使用express@3.0.0rc4时socket.io,和redis,我们如何获取会话数据并使用它来授权用户?我已经能够使用require('connect').utils.parseSignedCookie;,但是当我这样做时,我总是在握手时收到警告/错误,
warn - handshake error Error
Run Code Online (Sandbox Code Playgroud)
从我所读到的内容来看,听起来这并不是永久的解决方案.
好的,我session.socket.io在我的服务器上工作了.正如我所怀疑的那样,我在授权时陷入困境.我想我可能会以错误的方式解决这个问题,所以请随意纠正我.在我的Redis数据库中,我将获得用户的信息.他们第一次登录时,我想更新他们的cookie,以便它包含他们的用户信息.然后,当他们下次回到网站时,我想检查他们是否有cookie以及用户信息是否存在.如果它不存在,我想将它们发送到登录屏幕.在登录屏幕上,当用户提交信息时,它将针对Redis数据库测试该信息,如果匹配,它将使用用户信息更新cookie.我的问题是这些:
1)如何通过RedisStore更新/更改cookie?
2)看起来会话数据仅保存在cookie中.如果有人关闭了cookie,我如何在页面之间跟踪用户信息?
这是我的适用代码:
//...hiding unapplicable code...
var redis = require('socket.io/node_modules/redis');
var client = redis.createClient();
var RedisStore = require('connect-redis')(express);
var redis_store = new RedisStore();
var cookieParser = express.cookieParser('secret');
app.configure(function(){
//...hiding unapplicable code...
app.use(cookieParser);
app.use(express.session({secret: 'secret', store: redis_store}));
});
//...hiding code that starts the server and socket.io
var SessionSockets = require('session.socket.io');
var ssockets = new …Run Code Online (Sandbox Code Playgroud) 编辑
这是试图让我的问题更简单.
return this.someFunc(); == return { XXX:this.someFunc() };
Run Code Online (Sandbox Code Playgroud)
为了让这个陈述成真,我需要投入什么?
test = function(){
this.someFunc = function(){
this.retest = function(){
//...code
}
//...code
}
this.someFunc2 = function(){
//...code
}
return this.someFunc();
}
Run Code Online (Sandbox Code Playgroud)
这个功能允许我链接:test().retest();
但我想做的是返回多个项目.
test = function(){
this.someFunc = function(){
this.retest = function(){
//...code
}
//...code
}
this.someFunc2 = function(){
//...code
}
return { XXX:this.someFunc(), //What do I put for XXX
next:this };
}
Run Code Online (Sandbox Code Playgroud)
我想这样做来访问test()提供的另一个函数: test().next.someFunc2();
所以我的问题是这样的:
我仍然希望能够像这样链接:test().retest();
但我必须这样做:test().XXX.retest();
在我的代码中,我可以用什么名字来代替XXX来完成这个?这甚至可能吗?我曾尝试0和default了.谢谢您的帮助.
我确信我们都看过vanilla-js(最快的JavaScript框架)的网站; D和我只是很好奇,确切地说,为ja添加一个事件处理程序比jQuery更快.所以我前往jsPerf测试它,我对结果感到非常惊讶.
jQuery的表现优于普通JavaScript超过2500%.
我的测试代码:
//jQuery
$('#test').click(function(){
console.log('hi');
});
//Plain JavaScript
document.getElementById('test').addEventListener('click', function(){
console.log('hi');
});
Run Code Online (Sandbox Code Playgroud)
我只是无法理解这是怎么发生的,因为似乎最终jQuery最终必须使用与普通JavaScript使用完全相同的功能.有人可以解释为什么会发生这种情况吗?
我有我的谷歌折线图,看起来像这样:
10| .
| .....----''' ''--.
09| .-----''''' ''-
| '.
08| \
| '.
07| '.
|________________________________________________________
2012/12/27 12:01 2012/12/26 12:22 2012/12/25 11:33
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样(注意X轴标签):
10| .
| .....----''' ''-.
09| .-----''''' \
| '.
08| \
| '.
07| '.
|_______________________________________________
2012/12/27 2012/12/26 2012/12/25
12:01 12:22 11:33
Run Code Online (Sandbox Code Playgroud)
我尝试添加<br>,\n和\r但没有运气.
我查看了文档,我找到的最接近的东西hAxis.maxTextLines是没有minTextLines选项,所以我无法弄清楚如何强制它.我怎样才能做到这一点?
通过链接到谷歌创建图表似乎是可能的.你只需要设置的chxt变量有额外的x值(但更多的X轴,你需要)chxt=y,x,x.然后对于每个x轴,设置chxl变量的标签.chxl=1:|2012/12/27|2012/12/26|2012/12/25|2:|12:01|12:22|11:33
例如:
最近在工作中,我们已经从使用SVN切换到使用git.我们必须维护我们软件的多个版本,之前我们将它们设置为分支.所以在使用之后git svn clone,我们最终得到了4个分支:master,5.0,5.1和5.2.
注意:我们使用master作为我们的开发分支.5.0,5.1和5.2都是来自master的分支,并用作生产分支.
几天过去了,相当多的变化已经成为主人.在5.2中发现了一个错误,我们想要修复它.我们尝试了将一个更改合并到Git中的多个分支的解决方案.我们总是可以轻松地合并回主人,但每当我们合并回5.2时,我们就会遇到一堆冲突.我们看到的所有内容都显示了这个过程(为bugfix创建了一个新的分支并将其合并回开发和生产),这表明它应该如下所示:
(master)$ git checkout -b bugfix
# fixed bug and committed
(bugfix)$ git checkout master
(master)$ git merge bugfix
# successful merge
(master)$ git checkout 5.2
(5.2)$ git merge bugfix
# successful merge
Run Code Online (Sandbox Code Playgroud)
然而,对于我们来说,当我们到达最后一行时,git merge bugfix我们会遇到大量冲突.我们甚至没有在错误修复中触及的文件冲突.我们做错了什么?
注意:我们也尝试通过启动5.2中的bugfix分支来完成此过程.然后将错误修复程序合并到5.2中很容易,但将错误修复程序合并到master中会产生冲突.
显示该过程的其他地方:
我试图npm install jquery安装其中一个依赖项,Contextify时失败了.所以我试图npm install contextify得到这个错误.大约一个小时左右在线查看后,我找不到解决方案.我一直靠近但不够近.我的node.js在Ubuntu 12.04上运行,正如我在代码中看到的那样,node.js是0.8.11版本.尝试以下时出现错误npm install jquery:
gyp http GET http://nodejs.org/dist/v0.8.11/node-v0.8.11.tar.gz
gyp WARN install got an error, rolling back install
gyp ERR! configure error
gyp ERR! stack Error: socket hang up
gyp ERR! stack at createHangUpError (http.js:1263:15)
gyp ERR! stack at Socket.socketOnEnd (http.js:1351:23)
gyp ERR! stack at TCP.onread (net.js:418:26)
gyp ERR! System Linux 3.2.0-23-generic
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /opt/www/novacruisers/node_modules/jquery/node_modules/jsdom/node_modules/contextify
gyp ERR! node -v v0.8.11
gyp ERR! node-gyp -v …Run Code Online (Sandbox Code Playgroud) 据我所知,IE8可以访问该Array.prototype.slice方法.然而,当我试图将它NodeList变成一个数组时,它给了我错误Array.prototype.slice: 'this' is not a JavaScript object.你可以在这里查看,或者在这里查看我的代码:
HTML
<div id="test">Test</div>
Run Code Online (Sandbox Code Playgroud)
JavaScript的
var divs = document.getElementsByTagName('div');
divs = Array.prototype.slice.call(divs);
console.log(divs);
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?