【发布时间】:2013-04-22 21:12:53
【问题描述】:
我的静态文件中间件调用被我的路由覆盖,即使我以正确的顺序运行它:
首先我设置我的静态文件,如下所示:
app.use('/public/', express.static('/home/skerit/temp'));
app.use('/public/', express.static('/home/skerit/app/public'));
然后我添加我的路线:
app.get('/:controller/:action', callback);
现在,当我尝试获取 /public/empty.txt 时,路由被执行。 当我删除路线时,它工作得很好。
而且我确信它们以正确的顺序发生。 (首先是 app.use,然后是 app.get)
那么这里有什么问题呢?
编辑:既然我说我以正确的顺序执行它们,这里有一些证据。 我在代码的执行中添加了简单的日志语句:
[调试] - [stages.js:186] 静态中间件已设置! [调试] - [stages.js:191] 开始路线! [debug] - [routes.js:7] 设置控制器路由 [info] - [database.js:79] 已建立默认数据库连接 [info] - [database.js:93] MongoDB 服务器默认存储过程 [info] - [database.js:120] 创建到所有数据源的连接 [调试] - [stages.js:202] 设置 /:controller/:action如您所见:“已设置静态中间件”首先出现。只有这样它才开始设置其他路由。
【问题讨论】:
-
...您可能在
app.use(...static)之前定义了其他路线 -
我 100% 确定我不是。
-
您是否将
app.use(app.router);放在静态中间件之前的任何位置?查看更多(如果不是全部)您的 app.js 可能对我们有所帮助 -
在express/lib/application.js:406 上放一个断点,看看路由器是否在你预期之前被隐式添加。