即使我的路由是到不同的文件,express 也会为 index.html 提供服务
Posted
技术标签:
【中文标题】即使我的路由是到不同的文件,express 也会为 index.html 提供服务【英文标题】:express serves index.html even when my routing is to a different file 【发布时间】:2014-09-29 18:18:30 【问题描述】:我有一个公共目录,其中包含文件 index.html
和 index-08.html
。
使用下面的代码,我希望 index-08.html
能够得到服务。但是,index.html
会通过 localhost:3000
的浏览器请求提供服务
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', function(req, res)
res.sendFile('public/index-08.html');
);
但是,如果我将 index.html
的文件名更改为其他名称,例如 not-index.html
,则正确的文件 index-08.html
会得到服务。
你能帮我理解为什么会这样吗?
【问题讨论】:
【参考方案1】:这是因为你声明了app.use(express.static)
之前 app.get('/')
。 Express 按照声明的顺序检查路由,由于index.html
是static
中间件使用的默认文件名,因此它显示index.html
内容。
要解决此问题,您可以将app.use(express.static)
放在app.get('/')
之后,或者将static
第二个参数的index
属性设置为不存在的文件(false
似乎不起作用):
app.use(express.static(path.join(__dirname, 'public'), index: '_'));
【讨论】:
Express 4 是否改变了这些?我正在尝试为所有 HTML 页面请求发送 404,但运气不佳。不过,我在代码中的任何地方都看不到express.static
。
同意。 app.use() 的最新规范需要一个函数作为第二个参数。
这是我的热加载器,但原理相同。任何中间件都可能导致此问题,因此如果不是 express.static,请检查其他中间件。以上是关于即使我的路由是到不同的文件,express 也会为 index.html 提供服务的主要内容,如果未能解决你的问题,请参考以下文章
即使禁用 csrf,Spring Boot 也会为移动请求抛出 403
即使数据存在,`User` 类型的字段也会为 Query 返回 `null`
即使不需要模块,Webpack 也会为 node_modules 中的文件提供“模块没有导出的成员...”错误
即使用户有一些播放列表,Spotify Web API 也会为用户播放列表返回空项目