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中prop()方法和attr()方法的区别浅析
Sep 06 Javascript
js对象内部访问this修饰的成员函数示例
Apr 27 Javascript
批量修改标签css样式以input标签为例
Jul 31 Javascript
jquery特效 点击展示与隐藏全文
Dec 09 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
Feb 12 Javascript
jQuery实现三级菜单的代码
May 09 Javascript
论Bootstrap3和Foundation5网格系统的异同
May 16 Javascript
JavaScript实现倒计时跳转页面功能【实用】
Dec 13 Javascript
vue分类筛选filter方法简单实例
Mar 30 Javascript
js实时监控文本框输入字数的实例代码
Jan 18 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
Oct 19 Javascript
原生Javascript+HTML5一步步实现拖拽排序
Jun 12 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
有关PHP中MVC的开发经验分享
2012/05/17 PHP
php读取csv数据保存到数组的方法
2015/01/03 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
python的dict,set,list,tuple应用详解
2014/07/24 Python
Python中的闭包实例详解
2014/08/29 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
先进个人获奖感言
2014/01/24 职场文书
《雾凇》教学反思
2014/02/17 职场文书
教学质量评估实施方案
2014/03/17 职场文书
社团活动总结范文
2014/04/26 职场文书
企业负责人任命书
2014/06/05 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL
javascript的setTimeout()使用方法总结
2021/11/20 Javascript