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

yizhihongxing

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日

相关文章

  • ThinkPHP 模板引擎使用详解

    ThinkPHP 模板引擎使用详解 ThinkPHP 模板引擎是一种基于 PHP 语言的模板引擎,并且在 ThinkPHP 框架中得到了广泛的应用。本文将详细讲解 ThinkPHP 模板引擎的使用方法和技巧。 基本语法 ThinkPHP 模板引擎支持的标签和语法与 PHP 基本相同,因此对于熟悉 PHP 的开发者来说非常容易上手。以下是 ThinkPHP 模…

    other 2023年6月27日
    00
  • 详解Linux 中获取硬盘分区或文件系统的 UUID 的七种方法

    下面是详解Linux中获取硬盘分区或文件系统的UUID的七种方法的完整攻略: 概述 UUID (通用唯一标识符) 是一种行业标准,用于唯一标识信息。在Linux中,我们可以使用UUID来标识硬盘分区和文件系统。获取UUID是非常有用的,特别是在自动挂载硬盘等操作中。 方法一:使用blkid命令 blkid命令可以列出设备的文件系统和UUID信息。具体操作如下…

    other 2023年6月27日
    00
  • bootstrap的树形下拉

    Bootstrap的树形下拉 在Web开发中,我们可能会遇到需要呈现层级结构的场景。而Bootstrap提供了一个非常实用的组件——树形下拉(Treeview)。 什么是树形下拉? 树形下拉是一个可以展示层级结构的下拉框,每个选项都可以是父节点或子节点,并且可以向下展开子节点或合并父节点。通常用于显示目录结构或分类选项等。 如何使用Bootstrap树形下拉…

    其他 2023年3月28日
    00
  • golang通过递归遍历生成树状结构的操作

    下面是详细讲解 golang 通过递归遍历生成树状结构的操作的完整攻略。 操作步骤 定义节点结构体 首先需要定义节点结构体,表示每一个节点的信息。 type Node struct { ID int // 节点 ID Name string // 节点名称 ParentID int // 父节点 ID Children []*Node // 子节点 } 创建…

    other 2023年6月27日
    00
  • 我教你学之注册表清理

    我教你学之注册表清理 本文将为你讲解如何利用注册表清理工具清理 Windows 系统中无用的注册表项。这将有助于提高系统运行效率,加快系统速度。 什么是注册表? Windows 操作系统中,保存系统配置信息的一个重要组成部分就是注册表。从我们日常使用计算机的角度来看,注册表可以理解为是一个“配置文件”,里面存储了非常多的系统和应用程序的配置信息。 为什么需要…

    other 2023年6月25日
    00
  • 91助手无法导入短信、通讯录、联系人等问题的解决方法

    下面是针对“91助手无法导入短信、通讯录、联系人等问题的解决方法”的完整攻略。 问题描述 在使用91助手备份和恢复手机数据的过程中,有些用户可能会遇到无法导入短信、通讯录、联系人等问题。这种情况一般比较头疼,因为我们经常需要这些信息来帮助我们联系朋友、同事或客户等。所以,解决这个问题非常必要。 解决方法 以下是解决这个问题的几个步骤: 步骤一:检查91助手版…

    other 2023年6月27日
    00
  • Bootstrap(2) 排版样式

    Bootstrap(2)排版样式的完整攻略 Bootstrap是一个流行的前端框架,提供了丰富的CSS和JavaScript组件,可以帮助开发人员快速构建响应式网站和Web应用程序。本文将为您提供Bootstrap(2)排版样式的完整攻略,包括以下内容: Bootstrap(2)排版样式的概述 Bootstrap(2)排版样式的使用方法 示例说明 1. Bo…

    other 2023年5月5日
    00
  • 易语言制作QQ前台全自动无限加好友的代码

    易语言制作QQ前台全自动无限加好友的代码攻略 简介 本攻略将详细讲解如何使用易语言制作一个QQ前台全自动无限加好友的代码。通过该代码,您可以实现自动添加QQ好友的功能。 步骤 步骤一:导入相关模块 首先,我们需要导入一些易语言的相关模块,以便后续使用。在代码的开头添加以下代码: 导入模块(\"QQ接口模块\") 导入模块(\"窗…

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