Express.js指定文件未返回求助:GET请求始终返回index.html
Express.js 路由未执行、默认返回index.html的原因及解决办法
问题本质
- express.static的默认行为:当你用这个中间件托管静态目录时,访问根路径
/,它会自动查找目录下的index.html作为默认首页返回,这是Express内置的规则。 - 中间件执行顺序优先级:你把
app.use(express.static(...))写在了app.get("/")前面,请求到达服务器时,会先经过静态文件中间件。它匹配到根路径后直接返回了index.html,后续的app.get("/")路由处理函数完全不会被触发,所以你注释的代码、console.log都没机会运行。
可行解决方案
根据你的需求选择对应方案:
修改静态中间件的默认首页
如果希望根路径直接返回index2.html,给static中间件添加index配置:app.use(express.static(__dirname + "/public", { index: "index2.html" }));这样访问
/时,静态中间件会优先返回index2.html。调整路由与中间件的顺序
如果你想保留静态中间件的默认行为,但根路径走自定义逻辑,把app.get("/")移到静态中间件前面:// 先定义根路由 app.get("/", (req, res) => { console.log("Hello"); res.sendFile(__dirname + "/public/index2.html"); }) // 再挂载静态文件中间件 app.use(express.static(__dirname + "/public"));此时请求
/会先执行自定义路由,不会触发静态中间件的默认首页机制。禁用静态中间件的默认首页
如果不需要静态中间件自动返回首页,可关闭该功能:app.use(express.static(__dirname + "/public", { index: false }));之后根路径请求会进入你的
app.get("/")处理函数。
内容的提问来源于stack exchange,提问作者Viraj Doshi
相关产品推荐
相关产品推荐

