Express首页路由未被捕获,仅非首页路由可触发HTTPS跳转如何解决?
Express首页路由无法触发HTTPS跳转问题解决方案
根因说明
Express 中间件的执行优先级完全按照注册顺序决定,先注册的中间件会优先处理请求。
问题代码中将express.static静态资源中间件注册在了HTTPS跳转中间件之前:
- 访问首页
/时,express.static会默认匹配静态目录下的index.html文件,直接返回响应结束请求,不会进入后续的HTTPS跳转逻辑,因此首页无跳转响应。 - 访问其他无对应静态文件的路由时,
express.static不会终止请求,才会传递到后续的跳转中间件执行,因此这部分路由跳转正常。
修复方案
调整中间件注册顺序,将HTTPS跳转中间件放在所有业务中间件的最前方,保证所有请求都会先完成HTTP/HTTPS校验,再执行后续逻辑。
正确的代码顺序如下:
// 最先注册跳转校验中间件 app.use((req, res, next) => { req.secure ? next() : res.redirect('https://' + req.headers.host + req.url) }) // 再注册静态资源中间件 app.use(express.static(path.join(__dirname, './website/build'), { dotfiles: 'allow' })); // 最后注册兜底路由 app.use((req, res) => { res.sendFile(path.join(__dirname, './website/build/index.html')); });
内容的提问来源于stack exchange,提问作者user16390425
相关产品推荐
相关产品推荐

