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 相关文章推荐
玩转jQuery按钮 请告诉我你最喜欢哪些?
Jan 08 Javascript
JS修改css样式style浅谈
May 06 Javascript
JavaScript判断变量是对象还是数组的方法
Aug 28 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
Jun 20 Javascript
Bootstrap实现水平排列的表单
Jul 04 Javascript
jquery做个日期选择适用于手机端示例
Jan 10 Javascript
javascript 中的继承实例详解
May 05 Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 Javascript
基于vue 实现token验证的实例代码
Dec 14 Javascript
vue2.0 父组件给子组件传递数据的方法
Jan 15 Javascript
Vue.js中的高级面试题及答案
Jan 13 Javascript
JQuery绑定事件四种实现方法解析
Dec 02 jQuery
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之第五天
2006/10/09 PHP
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
Discuz 模板引擎的封装类代码
2008/07/18 PHP
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
JS获取地址栏参数的几种方法小结
2014/02/28 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
最实用的JS数组函数整理
2017/12/05 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
Python字符串格式化输出方法分析
2016/04/13 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
python机器学习实战之K均值聚类
2017/12/20 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
护理专业学生的求职信范文
2013/12/11 职场文书
十岁生日同学答谢词
2014/01/19 职场文书
置业顾问岗位职责
2014/03/02 职场文书
工程安全生产协议书
2014/11/21 职场文书
2016元旦文艺汇演主持词(开场白+结束语)
2015/12/03 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
Python turtle编写简单的球类小游戏
2022/03/31 Python