vue-router的HTML5 History 模式设置


Posted in Javascript onSeptember 08, 2018

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;
    }
  }
}

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

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

路由文件中的路径有问题

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
理解JavaScript的prototype属性
Feb 11 Javascript
防止登录页面出现在frame中js代码
Jul 22 Javascript
原生javascript实现隔行换色
Jan 04 Javascript
javascript中setInterval的用法
Jul 19 Javascript
Vue.2.0.5过渡效果使用技巧
Mar 16 Javascript
JS解决移动web开发手机输入框弹出的问题
Mar 31 Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
详解vue-cli项目中怎么使用mock数据
May 29 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
May 10 jQuery
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
Aug 08 jQuery
基于JS实现table导出Excel并保留样式
May 19 Javascript
vue实现页面切换滑动效果
Jun 29 Javascript
vue移动端下拉刷新和上拉加载的实现代码
Sep 08 #Javascript
react 父子组件之间通讯props
Sep 08 #Javascript
js代码规范之Eslint安装与配置详解
Sep 08 #Javascript
vue弹窗插件实战代码
Sep 08 #Javascript
浅谈从React渲染流程分析Diff算法
Sep 08 #Javascript
详解Webpack-dev-server的proxy用法
Sep 08 #Javascript
详解Ubuntu安装angular-cli遇到的坑
Sep 08 #Javascript
You might like
PHP取得一个类的属性和方法的实现代码
2011/05/22 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
php字符串操作常见问题小结
2016/10/11 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
2014/05/04 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
vue项目中跳转到外部链接的实例讲解
2018/09/20 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
Python实现简单的可逆加密程序实例
2015/03/05 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
Python常见读写文件操作实例总结【文本、json、csv、pdf等】
2019/04/15 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
生日寿宴答谢词
2014/01/19 职场文书
采购助理岗位职责
2014/02/16 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
个人委托书范本汇总
2014/10/01 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
化验室安全管理制度
2015/08/06 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
golang 实现时间戳和时间的转化
2021/05/07 Golang
浅谈Web Storage API的使用
2021/06/23 Javascript