vue-router启用history模式下的开发及非根目录部署方法

Vue-router启用history模式下的开发及非根目录部署方法

当使用 Vue.js 进行单页应用(SPA)开发后,我们通常使用vue-router来管理路由。Vue-router中默认使用Hash模式来实现路由跳转,即把路由信息放到URL的hash值中。但在实际使用中我们经常希望使用history模式,即把路由信息放到URL的路径中,这样URL更加直观、美观。本文将给出vue-router使用history模式的完整攻略,包括如何在非根路径下部署应用。

启用history模式

启用history模式很简单,只需要在创建router实例时传递一个mode参数即可,如下所示:

import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'

Vue.use(Router)

export default new Router({
  mode: 'history', //启用history模式
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    },
    //其他路由
  ]
})

由于使用history模式,我们需要在服务端进行相应的配置,确保所有路径都返回同一个HTML文件,并在其中加载Vue应用,否则用户首次访问某个子页面时将会收到404错误。可以使用Apache或NGINX实现这个功能,也可以使用Node.js的express、Koa等Web框架来实现。这里以Node.js的express为例进行说明。假设我们的Vue应用已经打包发布到了/dist目录下,我们需要按照以下方式配置express应用:

const express = require('express')
const path = require('path')
const app = express()

//加载Vue应用
app.use(express.static(path.join(__dirname, 'dist')))

//其他路由返回同一个HTML文件
app.get('*', function (req, res) {
  res.sendFile(path.join(__dirname, 'dist/index.html'))
})

app.listen(3000)

使用以上配置,对于所有的请求,express都会返回dist/index.html文件,并在其中加载Vue应用。

非根目录部署

如果我们希望在非根目录下部署Vue应用,例如http://localhost/myapp/home,那么需要进行相应的配置。

配置Vue-router

首先,我们需要在Vue-router中将路径前缀设置为/myapp,如下所示:

import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'

Vue.use(Router)

export default new Router({
  mode: 'history',
  base: '/myapp/', //设置路径前缀
  routes: [
    {
      path: 'home',
      name: 'home',
      component: Home
    },
    //其他路由
  ]
})

在base中设置路径前缀为/myapp/,在其他路由中都省略该前缀。

配置express应用

接下来我们需要配置express应用,让它能够正确处理请求。由于我们将Vue应用部署到/myapp目录下,因此需要将所有的路由请求都重定向到/myapp目录下。重定向的工作可以使用express中间件来实现,代码如下:

const express = require('express')
const path = require('path')
const app = express()

//加载静态资源
app.use('/myapp', express.static(path.join(__dirname, 'dist')))

//重定向所有的请求到/myapp目录下
app.use(function(req, res, next) {
  res.redirect('/myapp' + req.url)
})

//其他路由返回同一个HTML文件
app.get('/myapp/*', function (req, res) {
  res.sendFile(path.join(__dirname, 'dist/index.html'))
})

app.listen(3000)

上述代码中,我们首先使用express.static中间件加载静态资源。注意此处路径前缀应该为/myapp,即静态资源文件夹的实际路径为/dist/myapp。然后使用一个中间件将所有请求都重定向到/myapp目录下。最后,我们使用一个路由将所有以/myapp开头的请求都返回dist/index.html文件。

使用以上方法,我们就可以在非根目录下方便地部署Vue应用了。

示例说明

以下是两个示例,一个是在根目录下部署Vue应用,一个是在非根目录下部署Vue应用。

在根目录下部署Vue应用

Vue应用代码如下:

<!--App.vue-->
<template>
  <div>
    <h1>这是首页</h1> <!--路由路径为/-->
    <router-link to="/about">关于我们</router-link> <!--路由路径为/about-->
  </div>
</template>
<script>
export default {
  name: 'App'
}
</script>

路由配置如下:

import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'
import About from './views/About.vue'

Vue.use(Router)

export default new Router({
  mode: 'history',
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    },
    {
      path: '/about',
      name: 'about',
      component: About
    }
  ]
})

然后使用Vue CLI进行打包。打包完成后,我们得到了一个dist目录。将dist目录下的所有文件上传到服务器,然后在服务器上启动一个express应用,并将所有路由请求重定向到/dist目录下。代码如下:

const express = require('express')
const path = require('path')
const app = express()

//加载静态资源
app.use(express.static(path.join(__dirname, 'dist')))

//重定向所有的请求到/dist目录下
app.use(function(req, res, next) {
  res.redirect('/dist' + req.url)
})

//其他路由返回同一个HTML文件
app.get('*', function (req, res) {
  res.sendFile(path.join(__dirname, 'dist/index.html'))
})

app.listen(3000)

以上代码中,我们将Vue应用部署在/dist目录下,express将所有静态资源请求映射到/dist目录下。路由请求都重定向到/dist目录下,具体实现如上述代码所示。

在非根目录下部署Vue应用

Vue应用代码如下:

<!--App.vue-->
<template>
  <div>
    <h1>这是首页</h1> <!--路由路径为/myapp/-->
    <router-link to="/myapp/about">关于我们</router-link> <!--路由路径为/myapp/about-->
  </div>
</template>
<script>
export default {
  name: 'App'
}
</script>

路由配置如下:

import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'
import About from './views/About.vue'

Vue.use(Router)

export default new Router({
  mode: 'history',
  base: '/myapp/',
  routes: [
    {
      path: '',
      name: 'home',
      component: Home
    },
    {
      path: '/about',
      name: 'about',
      component: About
    }
  ]
})

打包完成后,将dist文件夹下的所有文件上传到服务器上/myapp目录下。然后在服务器上启动一个express应用,将所有的请求重定向到/myapp目录下,并将所有/myapp路由请求返回/dist/index.html文件。

const express = require('express')
const path = require('path')
const app = express()

//加载静态资源
app.use('/myapp', express.static(path.join(__dirname, 'dist')))

//重定向所有的请求到/myapp目录下
app.use(function(req, res, next) {
  res.redirect('/myapp' + req.url)
})

//其他路由返回同一个HTML文件
app.get('/myapp/*', function (req, res) {
  res.sendFile(path.join(__dirname, 'dist/index.html'))
})

app.listen(3000)

以上就是Vue-router启用history模式下的开发及非根目录部署方法的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue-router启用history模式下的开发及非根目录部署方法 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • c-epollerr和epollhup到底是什么意思 以及如何处理?

    以下是关于“c-epollerr和epollhup到底是什么意思以及如何处理”的完整攻略,包括基本概念、原因、处理方法和示例。 基本概念 c-epollerr和epollhup是Linux系统中的两个事件类型,用于处理网络编程中的异常情况。c-epollerr表示发生了错误,而epollhup表示对端关闭连接。 原因 c-epollerr和ephup事件通常…

    other 2023年5月7日
    00
  • Python类的继承与多态详细介绍

    Python是一门面向对象的编程语言,类的继承和多态是面向对象编程的两个重要特性。在Python中,类的继承可以让一个类“继承”另一个类的属性和方法,而多态则让不同的子类对象可以调用相同的父类方法,并产生不同的结果。 类的继承 在Python中,可以通过在类定义时使用括号指定继承哪个父类来实现类的继承。例如: class Animal: def __init…

    other 2023年6月27日
    00
  • jquery制作省份城市地区多选控件总结

    jQuery制作省份城市地区多选控件总结 在前端开发中,经常需要使用到省份城市地区的选择控件。针对这一需求,我们可以使用jQuery库来制作出一个省份城市地区多选控件,方便用户进行选择。 1. 实现思路 实现多选控件的核心思路是:将所有可选项的数据存储在JavaScript数组中,然后根据用户的选择动态生成相应的省份、城市、地区选项。 具体来说,我们需要先将…

    其他 2023年3月28日
    00
  • git分支(本地)

    以下是“git分支(本地)”的完整攻略: git分支(本地) Git是一种分布式版本控制系统,它支持分支操作,可以方便地进行代码管理和版本控制。本攻略将详细讲解Git分支(本地)的基本操作,包括创建分支、切换分支、合并分支等内容。 创建分支 在Git中,可以使用git branch命令创建一个新的分支。以下是创建分支的示例: git branch new_b…

    other 2023年5月8日
    00
  • Docker Volumn容器间共享数据的实现

    当我们在使用Docker时,经常需要在不同的容器之间共享数据。这时候,我们可以使用Docker Volumes技术来实现容器间共享数据的功能。 Docker Volumes是什么? Docker Volume是一个可管理的数据存储组件。与容器相比,Docker Volume更像是针对数据的一种管理方式,可以让我们更加灵活的管理数据。与Docker容器不同,D…

    other 2023年6月26日
    00
  • 使用python轻松批量压缩图片

    使用Python轻松批量压缩图片 如果你经常需要在工作中处理大量图片,那么你一定知道压缩图片的重要性。压缩图片可以大幅降低图片文件的大小,节省存储空间和网络带宽。在本文中,我们将介绍使用Python来批量压缩图片的方法,让图片处理更加高效。 安装Pillow库 Pillow是一个Python图像处理库,可以进行图片打开、编辑和保存等操作。要使用Pillow库…

    其他 2023年3月28日
    00
  • WPF学习09:数据绑定之 Binding to List Data

    WPF学习09:数据绑定之 Binding to List Data的完整攻略 本文将为您提供WPF学习09:数据绑定之 Binding to List Data的完整攻略,包括介绍、使用方法和两个示例说明。 介绍 WPF是一种基于XAML的用户界面框架,可以用于创建Windows应用程序。数据绑定是WPF中的一个重要特性,可以将数据与UI元素进行绑定,实现…

    other 2023年5月6日
    00
  • 打开Win7电脑打开桌面开始菜单栏里面空白的解决方法

    打开Win7电脑打开桌面开始菜单栏里面空白的解决方法 如果你打开Win7电脑的桌面开始菜单栏后发现里面全部都是空白,那么这篇文章可以帮助你解决这个问题。 步骤一:检查必要的服务是否已开启 首先,你需要检查以下Windows服务是否都已经正常开启: Windows搜索服务:该服务负责维护开始菜单与文件夹搜索,如果没有正常运行,可能会导致开始菜单栏里全部都是空白…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部