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 相关文章推荐
JS 强制设为首页的代码
Jan 31 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
Jan 11 Javascript
javascript中sort()的用法实例分析
Jan 30 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
Mar 23 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
Jul 27 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
Sep 14 Javascript
JS获取子、父、兄节点方法小结
Aug 14 Javascript
webpack处理 css\less\sass 样式的方法
Aug 21 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
Nov 27 Javascript
深入学习JavaScript 高阶函数
Jun 11 Javascript
在vue中动态修改css其中一个属性值操作
Dec 07 Vue.js
vue-cropper组件实现图片切割上传
May 27 Vue.js
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
Smarty模板快速入门
2007/01/04 PHP
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
php文件上传的两种实现方法
2016/04/04 PHP
[原创]PHP字符串中插入子字符串方法总结
2016/05/06 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
JavaScript设计模式之单例模式实例
2014/09/24 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
Python访问MySQL封装的常用类实例
2014/11/11 Python
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
Python语言进阶知识点总结
2019/05/28 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
keras实现调用自己训练的模型,并去掉全连接层
2020/06/09 Python
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
业务代表的岗位职责
2013/11/16 职场文书
大学生创业计划书的范文
2014/01/07 职场文书
商场主管竞聘书
2014/03/31 职场文书
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python