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 setTimeout和setInterval 的区别
Dec 08 Javascript
js DOM 元素ID就是全局变量
Sep 20 Javascript
node.js中使用node-schedule实现定时任务实例
Jun 03 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
Aug 14 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
Sep 02 Javascript
AngularJS模块管理问题的非常规处理方法
Apr 29 Javascript
JavaScript中双符号的运算详解
Mar 12 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
Sep 15 Javascript
layer弹出层扩展主题的方法
Sep 11 Javascript
jQuery实现数字华容道小游戏(实例代码)
Jan 16 jQuery
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
VUE使用draggable实现组件拖拽
Apr 06 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
PHP 实用代码收集
2010/01/22 PHP
php与paypal整合方法
2010/11/28 PHP
php 操作符与控制结构
2012/03/07 PHP
php array的学习笔记
2012/05/10 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
vue 项目常用加载器及配置详解
2018/01/22 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
Python查看微信撤回消息代码
2018/06/07 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
python中Django文件上传方法详解
2020/08/05 Python
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
消防安全员岗位职责
2014/03/10 职场文书
公开服务承诺制度
2014/03/26 职场文书
公证委托书大全
2014/04/04 职场文书
地震捐款倡议书
2014/08/29 职场文书
信息合作协议书
2014/10/09 职场文书
2015年暑期见闻
2015/07/14 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
大学生受助感言
2015/08/01 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
Navicat Premium自定义 sql 标签的创建方式
2022/09/23 数据库