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 相关文章推荐
再谈IE中Flash控件的自动激活 ObjectWrap
Mar 09 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
Nov 14 Javascript
jquery实现无限分级横向导航菜单的方法
Mar 12 Javascript
在Javascript中处理数组之toSource()方法的使用
Jun 09 Javascript
深入理解angularjs过滤器
May 25 Javascript
json对象与数组以及转换成js对象的简单实现方法
Jun 24 Javascript
javascript实现的上下无缝滚动效果
Sep 19 Javascript
Vue.js bootstrap前端实现分页和排序
Mar 10 Javascript
js防刷新的倒计时代码 js倒计时代码
Sep 06 Javascript
深入理解Node module模块
Mar 26 Javascript
vue.js中proxyTable 转发请求的实现方法
Sep 20 Javascript
es6函数之尾调用优化实例分析
Apr 25 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 array_slice函数的使用以及参数详解
2008/08/30 PHP
PHP中trim()函数简单使用指南
2015/04/16 PHP
如何在PHP中读写文件
2020/09/07 PHP
在html页面上拖放移动标签
2010/01/08 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
javascript smipleChart 简单图标类
2011/01/12 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
2014/05/13 Javascript
jQuery实现的经典滑动门效果
2015/09/22 Javascript
深入理解jQuery 事件处理
2016/06/14 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
2017/08/01 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
VSCode搭建React Native环境
2020/05/07 Javascript
Python中max函数用法实例分析
2015/07/17 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
Python格式化日期时间操作示例
2018/06/28 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
python实现小世界网络生成
2019/11/21 Python
Python实现井字棋小游戏
2020/03/09 Python
英国儿童设计师服装的领先零售商:Base
2019/03/17 全球购物
高一化学教学反思
2014/02/05 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
机关党员公开承诺书
2014/08/30 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
Oracle 触发器trigger使用案例
2022/02/24 Oracle