vue-router的HTML5 History 模式设置

作者 : 开心源码 本文共1788个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共53人阅读

VUE是当下最火爆的前台框架之一,vue-router是vue项目中几乎都会用到的组件,然而体验一时爽,其实坑不少。本篇经验将详细详情vue-router的两种mode效果和开发测试环境下的问题,并给出处理方案。

vue-router的HTML5 History 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而毋庸重新加载页面。

const router = new VueRouter({
mode: 'history',
routes: [...]
})

当你使用 history 模式时,URL 就像正常的 url,例如 http://yoursite.com/user/id, 就是长这样的!

不过这种模式要玩好,还需要后端配置支持。由于我们的应用是个单页用户端应用,假如后端没有正确的配置,当客户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,这就尴尬了。

所以,你要在服务端添加一个覆盖所有情况的候选资源:假如 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。

目前后台服务器有Apache、nginx、原生 Node.js、基于 Node.js 的 Express、Internet Information Services (IIS)、Caddy、Firebase 主机等。

先给一个官方标准版配置的传送门,请戳这里→ https://router.vuejs.org/zh/guide/essentials/history-mode.html

既然是官方给出的配置,那一定就会说的很官方咯~

按照官方给出的示例,将道理是成功的,但是官方给出的只局限于这个项目在服务器的根目录下!

假如你的项目没有放在根目录下,那么就是这么的不讲道理。

下面是在实际开发中碰到的问题。

我们的后台服务器是nginx,所以按照官方的给出的配置,找到nginx.conf,照抄代码,修改完后重启服务器,讲道理是成功的。

server
{
listen 80;
server_name oursite.com;
location /test/ {
alias /usr/local/test/;
index index.htm index.html;
#上面的就是少量常规配置,下面这个才是重点
try_files $uri $uri/ /index.html;

#这里没有采用官方给出解决404错误页面的方案
#方案一(把所有没有后缀名的请求假如404都跳转到index.html,我们没有采用)
#error_page 404 /test/index.html;

#方案二(404的方式,不是特别完美。会有浏览器留下404的状态(容易被第三方劫持),以下方式可以避免被第三方劫持!)
if (!-e $request_filename) {
rewrite ^/(.*) /test/index.html last;
break;
}//前台全栈学习交流圈:866109386
}//帮助1-3年前台人员
}//突破技术瓶颈,提升思维能力

但是,事实就是这么的不讲道理,我们并没有成功!这就令人很是郁闷了,心中一万只神兽羊驼,奔腾而过~ 为什么没有成功呢,都是按部就班做的呀,完全不讲道理!

而真相只有一个,那就是~~~

路由文件中的路径有问题

const router = new VueRouter({
mode: 'history',
routes: [
{ path: '/test/', component: YourComponent },
{ path: '/test/a', component: YourComponent },
{ path: '/test/b:x', component: YourComponent }
]
})

在路由文件中所有的路径前面加上服务器下项目所在的文件名就可,当然也包括和this.$router.push()中的路径,不然又是不讲道理的。

这只是在nginx服务器下的一种处理方案,至于别的服务器应该也是同理的。

对前台的技术,架构技术感兴趣的同学关注我的头条号,并在后端私信发送关键字:“前台”就可获取免费的架构师学习资料

知识体系已整理好,欢迎免费领取。还有面试视频分享可以免费获取。关注我,可以取得没有的架构经验哦!!

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » vue-router的HTML5 History 模式设置

发表回复