在我询问之前,app.router
我认为我至少应该解释一下我认为在使用中间件时会发生什么。要使用中间件,要使用的功能是app.use()
. 当中间件被执行时,它要么通过 using 调用下一个中间件,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');
});
所以我决定第一步是找出为什么app.router
在我的代码中包含它很重要。所以我将其注释掉,启动了我的应用程序并导航到/
. 它很好地显示了我的索引页面。嗯,也许它起作用了,因为我正在从我的路由文件(routes.index)导出路由。所以接下来我导航到/test
它并在屏幕上显示测试。哈哈,好吧,我不知道是什么app.router
。无论它是否包含在我的代码中,我的路由都很好。所以我肯定错过了一些东西。
所以这是我的问题:
有人可以解释一下app.router
它的作用,它的重要性,以及我应该将它放在我的中间件调用中的什么位置吗?如果我能得到一个关于express.static()
. 据我所知,express.static()
是我的信息的缓存,如果应用程序找不到请求的页面,它会检查缓存是否存在。