【问题标题】:express serves index.html even when my routing is to a different file即使我的路由是到不同的文件,express 也会为 index.html 提供服务
【发布时间】: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 会得到服务。

你能帮我理解为什么会这样吗?

【问题讨论】:

    标签: node.js express routing


    【解决方案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,请检查其他中间件。
    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 2016-06-10
    • 2017-07-27
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2019-10-15
    • 2021-06-05
    相关资源
    最近更新 更多