Nuxt静态部署后路由刷新报错
引子
在正常情况下,路由跳转没什么问题,但F5刷新网页会报错,在不同的路由下报错问题还都不太一样,因为是在生产环境下,很难定位问题。
报错问题汇总
- Cannot read property '$scopedSlots' of undefined
- n.setAttribute is not function()
- ...
在正常情况下,路由跳转没什么问题,但F5刷新网页会报错,在不同的路由下报错问题还都不太一样,因为是在生产环境下,很难定位问题。
更离谱的是,这个包部署在其他生产环境并没有什么问题,单单在这个环境又问题。。。
问题定位
前面也说过,该版本是个稳定版本,控制变量法来排除问题,逐一排除之后,发现该环境的nginx与其他环境不太一样
location / {
try_files $uri $uri/ =404;
#try_files $uri $uri /index.html;
}
查看了其他几个服务器配置都是try_files $uri $uri/ =404;
但是也有个例外也是try_files $uri $uri /index.html;
这就蛋疼了。
但死马当活马医,更换成
try_files $uri $uri/ =404;,
nginx -s reload
启动!
比较玄学的时刻来临了,我自个刷新了几次都没啥问题,我以为问题解决了,给其他人演示,竟然域名后面跟着端口号了!
https://xxx.xxx.xxx:11080/xxx/xx
并不是稳定复现,偶现问题。
这就很蛋疼了。
port_in_redirect off;
既然域名后面带端口号,那就去查询一下nginx如何去掉它。
神奇代码port_in_redirect:
通过指定port_in_redirect off;告知nginx在redirect的时候不要带上port,如果没有配置,默认该值为true
port_in_redirect off;
location / {
try_files $uri $uri/ =404;
}
至此,该问题解决了。
写在最后
这个问题定位初期,简直有点怀疑人生了,一开始觉得是包打的有问题,折腾了半天一无所获;到后面觉得代码写的有问题,因为有部分页面结构是渲染出来的,然鹅却无法定位到底是哪里有问题,一度到放弃;最后面就是折腾nginx,所幸的是找到了合适的解决方案。