即使我的路由是到不同的文件,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.htmlindex-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.htmlstatic 中间件使用的默认文件名,因此它显示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 也会为用户播放列表返回空项目

为啥即使指定了所有值,Spark SQL 也会为字符串列打开可为空?

在 Python 中,即使键存在,编译器也会为 datetimeIndex 函数抛出键错误