Express渲染EJS时被index.html覆盖的问题咨询
问题原因&解决方案
核心原因
这是Express中间件的执行顺序导致的:
你用app.use(express.static(__dirname))把整个项目根目录设成了静态资源目录,而Express的静态文件中间件默认会优先匹配目录下的index.html作为访问根路径/时的响应。也就是说,当你访问http://localhost:3000/时,静态中间件先找到了根目录下的index.html,直接返回给浏览器,根本没执行到你后面写的app.get('/')路由逻辑,自然不会渲染list.ejs。
解决方法(任选其一)
规范静态资源目录(推荐)
不要把整个项目目录设为静态目录,专门新建一个public文件夹,用来放css、js、图片等静态资源,然后修改静态中间件的配置:// 替换原来的app.use(express.static(__dirname)) app.use(express.static(__dirname + '/public'));这样根目录下的
index.html不会被静态中间件处理,访问/时就会走到你的路由里渲染list.ejs。调整中间件顺序
把静态中间件的代码放到路由定义之后,这样Express会先匹配路由,只有路由没匹配到时才会走静态文件中间件:// 先定义路由 app.get('/', (req, res) => { // 你的路由逻辑... }) // 再设置静态中间件 app.use(express.static(__dirname));禁用静态中间件的默认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
相关产品推荐
相关产品推荐

