在各种面经都提到了这个history路由服务器设置兜底的问题,那么,能否前端在路由守卫设置兜底呢?
不能,用户直接访问:http://my-app.com/user/id或者属性页面,客户端会向服务器发请求,如果服务器没配置对,用户看到404错误,后端兜底是因为,无论什么情况下都返回一个html文件一般是index.html,然后前端接管根据路径显示组件,上面这种情况请求时发给服务器的,前端还没加载和执行,路由守卫没法处理这种情况
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
不行,因为访问
url
是从服务器取资源的过程,history
模式下,路由变更时得去不同的服务器目录下取资源,但实际一般都是spa
应用,只有1个页面,因此得配置访问不同地址时全部指向这个页面资源(所谓兜底);而hash
模式下不需要配置的原因,是因为访问服务器地址是固定的,一直访问的同一个页面,页面根据#
后面不同的hash渲染不同的内容而已;这个配置工作按理应是要运维人员配置。但实际中,绝大部分中小公司中服务器配置一般都交给了后端配置,后端发版服务的时候顺手就配置了。
补充内容:
为何不能用前端路由守卫?
路由守卫本质是一个个具有特殊意义
js
function
,在代码运行到某个特殊阶段才执行。如果history
模式下后端不配置服务器,那么访问时根本无法从服务器下载到html、js、css
等资源,项目都无法正常跑起来的,更不用说执行路由守卫了