在我问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')
调用之上。所以看起来,如果它已经这样设置了,那么它应该保持这样。
在重新安排我的代码,这样我就可以看到我的手写笔的变化,它看起来像这样:
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');
});
所以我决定第一步是找出为什么在我的代码中有app.router
是重要的。所以我把它注释掉,启动我的应用程序并导航到/
。它很好地显示了我的索引页。嗯,也许它工作,因为我从我的路由文件(routes.index)导出路由。所以接下来我导航到/test
,它在屏幕上显示Test。哈哈,好吧,我不知道app.router
是做什么的。无论它是否包含在我的代码中,我的路由都很好。所以我肯定遗漏了一些东西。
所以我的问题是:
有人能解释一下app.router
做什么,它的重要性,以及我应该把它放在中间件调用的地方吗?如果我能得到一个关于express.static()
的简短解释,那就太好了。据我所知,express.static()
是我信息的缓存,如果应用程序无法找到所请求的页面,它将检查缓存,看看它是否存在。