You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express渲染EJS时被index.html覆盖的问题咨询

问题原因&解决方案

核心原因

这是Express中间件的执行顺序导致的:
你用app.use(express.static(__dirname))把整个项目根目录设成了静态资源目录,而Express的静态文件中间件默认会优先匹配目录下的index.html作为访问根路径/时的响应。也就是说,当你访问http://localhost:3000/时,静态中间件先找到了根目录下的index.html,直接返回给浏览器,根本没执行到你后面写的app.get('/')路由逻辑,自然不会渲染list.ejs。

解决方法(任选其一)

  1. 规范静态资源目录(推荐)
    不要把整个项目目录设为静态目录,专门新建一个public文件夹,用来放css、js、图片等静态资源,然后修改静态中间件的配置:

    // 替换原来的app.use(express.static(__dirname))
    app.use(express.static(__dirname + '/public'));
    

    这样根目录下的index.html不会被静态中间件处理,访问/时就会走到你的路由里渲染list.ejs。

  2. 调整中间件顺序
    把静态中间件的代码放到路由定义之后,这样Express会先匹配路由,只有路由没匹配到时才会走静态文件中间件:

    // 先定义路由
    app.get('/', (req, res) => {
        // 你的路由逻辑...
    })
    // 再设置静态中间件
    app.use(express.static(__dirname));
    
  3. 禁用静态中间件的默认index页
    在静态中间件的配置里加上index: false,禁止自动返回index.html:

    app.use(express.static(__dirname, { index: false }));
    

额外提示

你代码里的判断逻辑有个小错误:

if (currentDay === 6 | currentDay === 0)

这里用的|是位运算符,应该换成逻辑或||,否则判断结果会出错,比如当currentDay是0时,6 | 0等于6,和currentDay ===6对比是false,导致周末的判断失效。修正后:

if (currentDay === 6 || currentDay === 0)

内容的提问来源于stack exchange,提问作者Monalisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:50:27