【发布时间】:2012-09-23 14:52:02
【问题描述】:
在我询问app.router 之前,我想我至少应该解释一下我认为在使用中间件时会发生什么。要使用中间件,要使用的函数是app.use()。当中间件被执行时,它要么使用next() 调用下一个中间件,要么让它不再调用中间件。这意味着我放置中间件调用的顺序很重要,因为一些中间件依赖于其他中间件,而接近末尾的一些中间件甚至可能不会被调用。
今天我正在处理我的应用程序并让我的服务器在后台运行。我想进行一些更改并刷新我的页面并立即查看更改。具体来说,我正在更改我的布局。我无法让它工作,所以我在 StackOverflow 上搜索了答案并找到了 this question。它说要确保express.static() 在require('stylus') 之下。但是当我查看那个 OP 的代码时,我看到他在中间件调用的最后有他的 app.router 调用,我试图弄清楚为什么会这样。
当我创建我的 Express.js 应用程序(版本 3.0.0rc4)时,我使用了命令 express app --sessions --css stylus,在我的 app.js 文件中,代码是在 express.static() 和 @987654331 上方设置了我的 app.router @电话。所以看起来,如果它已经以这种方式设置,那么它应该保持这种方式。
重新安排我的代码以便我可以看到我的 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() 是我信息的缓存,如果应用程序找不到请求的页面,它会检查缓存是否存在。
【问题讨论】:
-
感谢您提出这个问题。我一直在谷歌上搜索这个答案(以及提示它的问题)。
-
这是一个写得很好的问题,我在谷歌上搜索同样的东西。
标签: node.js middleware express