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中的关于类型转换的性能优化
Dec 14 Javascript
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 Javascript
js 高效去除数组重复元素示例代码
Dec 19 Javascript
浅谈javascript的调试
Jan 28 Javascript
AngularJS实现按钮提示与点击变色效果
Sep 07 Javascript
vue2.X组件学习心得(新手必看篇)
Jul 05 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
Aug 16 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
Sep 07 Javascript
Node配合WebSocket做多文件下载以及进度回传
Nov 07 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
Apr 26 Javascript
JavaScript enum枚举类型定义及使用方法
May 15 Javascript
javascript实现移动端触屏拖拽功能
Jul 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
拼音码表的生成
2006/10/09 PHP
PHP中break及continue两个流程控制指令区别分析
2011/04/18 PHP
深入分析php之面向对象
2013/05/15 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
Flask处理Web表单的实现方法
2021/01/31 Python
输入一行文字,找出其中大写字母、小写字母、空格、数字、及其他字符各有多少
2016/04/15 面试题
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
毕业生自我鉴定实例
2014/01/21 职场文书
乡下人家教学反思
2014/02/01 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
七一党日活动总结
2014/07/08 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
创先争优个人总结
2015/03/04 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
Python实现单例模式的5种方法
2021/06/15 Python