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 12 Javascript
简单谈谈javascript Date类型
Sep 06 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
Jun 13 Javascript
javascript如何创建对象
Aug 29 Javascript
BootStrap实现手机端轮播图左右滑动事件
Oct 13 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
Dec 26 Javascript
vue+element实现打印页面功能
May 20 Javascript
实用Javascript调试技巧分享(小结)
Jun 18 Javascript
countup.js实现数字动态叠加效果
Oct 17 Javascript
小程序分享链接onShareAppMessage的具体用法
May 22 Javascript
vue 项目引入echarts 添加点击事件操作
Sep 09 Javascript
如何在面试中手写出javascript节流和防抖函数
Oct 22 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
JS 网站性能优化笔记
2011/05/24 PHP
第六章 php目录与文件操作
2011/12/30 PHP
php include和require的区别深入解析
2013/06/17 PHP
PHP四舍五入精确小数位及取整
2014/01/14 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
为jQuery增加join方法的实现代码
2010/11/28 Javascript
jquery json 实例代码
2010/12/02 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
校园安全检查制度
2014/02/03 职场文书
物理学专业求职信
2014/07/04 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
见习报告的格式
2014/10/31 职场文书
学习党章的体会
2014/11/07 职场文书
冰峪沟导游词
2015/02/09 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
Pandas 稀疏数据结构的实现
2021/07/25 Python
python可视化大屏库big_screen示例详解
2021/11/23 Python