路由器的两种工作模式:hash模式和history模式

路由器的两种工作模式:hash模式和history模式文章目录hash模式的路由器history模式的路由器history模式下的404问题及其解决方法打包前端项目express构建小型服务器前端打包文件部署至服务器解决404报错问题url中,#后面的字符串就是hash值。hash是和浏览器对话的,和服务器没有关系,hash值不会作为url的一部分发送给服务器。路由器(vue-router)有两种工作模式:hash模式和history模式,默认是hash模式。hash模式的路由器路由器默认的工作模式是hash模式。因此我们看到的是http://lo

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

url中,#后面的字符串就是hash值。
hash是和浏览器对话的,和服务器没有关系,hash值不会作为url的一部分发送给服务器。

路由器(vue-router)有两种工作模式:hash模式和history模式,默认是hash模式。

hash模式的路由器

路由器默认的工作模式是hash模式。因此我们看到的是
http://localhost:8080/#/
http://localhost:8080/#/about
http://localhost:8080/#/home

  • 普通组件components/Banner.vue
<template>
    <div class="col-xs-offset-2 col-xs-8">
        <div class="page-header">
            <h2>Vue Router Demo</h2>
        </div>
    </div>
</template>

<script> export default { 
     name:"Banner" } </script>

<style> </style>

Jetbrains全家桶1年46,售后保障稳定

  • 路由组件pages/Home.vue
<template>
  <div>
    <h2>Home组件内容</h2>
  </div>
</template>

<script> export default { 
     name:'Home' } </script>

<style> </style>
  • 路由组件pages/About.vue
<template>
  <h2>我是About的内容</h2>
</template>

<script> export default { 
     name:'About' } </script>

<style> </style>
  • 路由器router/index.js
import VueRouter from "vue-router";
import Home from "../pages/Home";
import About from "../pages/About";

const router = new VueRouter({ 
   
    routes:[
        { 
      
            path:"/about",
            component:About
        },
        { 
   
            path:"/home",
            component:Home
        }
    ]
})

export default router;
  • App.vue
<template>
  <div>
    <div class="row">
      <Banner/>
    </div>
    <div class="row">
      <div class="col-xs-2 col-xs-offset-2">
        <div class="list-group">
          <router-link to="/about" active-class="active" class="list-group-item">About</router-link>
          <router-link to="/home" active-class="active" class="list-group-item">Home</router-link>
        </div>
      </div>
      <div class="col-xs-6">
        <div class="panel">
          <div class="panel-body">
            <keep-alive>
              <router-view></router-view>
            </keep-alive>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script> import Banner from "./components/Banner.vue"; export default { 
     name: 'App', components:{ 
     Banner } } </script>
  • 入口组件main.js
import Vue from 'vue'
import App from './App.vue'
import VueRouter from "vue-router";

import router from "./router/index";

Vue.config.productionTip = false;

Vue.use(VueRouter);

new Vue({ 
   
  render: h => h(App),
  router:router
}).$mount('#app')
  • 启动应用,测试效果。
    在这里插入图片描述

history模式的路由器

路由器工作模式为history模式时,我们看到的是
http://localhost:8080/
http://localhost:8080/about
http://localhost:8080/home

  • 修改路由器router/index.js
    要将路由器的工作模式从默认的hash模式修改为history模式,只需要修改router/index.js,将mode设置为history
import VueRouter from "vue-router";
import Home from "../pages/Home";
import About from "../pages/About";

const router = new VueRouter({ 
   
    mode:"history",
    routes:[
        { 
      
            path:"/about",
            component:About
        },
        { 
   
            path:"/home",
            component:Home
        }
    ]
})

export default router;

在这里插入图片描述

  • 重启应用,测试效果。
    在这里插入图片描述

history模式下的404问题及其解决方法

打包前端项目

history模式下,npm run build打包项目,得到dist目录。
在这里插入图片描述

express构建小型服务器

  1. 初始化项目,npm init -y
  2. 安装express,npm install –save express
  3. 项目根目录下新建文件server.js
const express = require("express");

const app = express();

app.use(express.static(__dirname+"/static"));

app.get("/person",(request,response) => { 
   
    response.send({ 
   
        name:"Nicholas",
        gender:'Male'
    })
})

app.listen(3000,(err) =>{ 
   
    if(!err) console.log("服务器启动了!");
})
  1. 项目根目录下新建子目录static,static下新建文件index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>index</title>
</head>
<body>
    <h2>hello</h2>
</body>
</html>
  1. 启动服务器,node server
D:\vue\vue_server>node server
服务器启动了!
  1. 打开浏览器,访问localhost:3000。
    在这里插入图片描述

前端打包文件部署至服务器

所谓“前端打包文件部署至服务器”,就是将前面得到的dist整个目录(及其子目录中的所有文件)放入服务器的static目录下。放好后,访问localhost:3000。
在这里插入图片描述
可以看到,history模式下的dist部署到服务器后,路由切换访问/home或/about时,没有问题。但在/home时刷新页面,显示无法找到,报404。
hash模式下的dist部署到服务器后,就不会出现以上问题。

解决404报错问题

刷新时报404的问题,需要后端程序员的帮助。本篇使用node示范下。

  • 安装第三方包,npm install –save connect-history-api-fallback。
  • 使用第三方包,修改server.js,如下。
const express = require("express");

const app = express();

const history = require("connect-history-api-fallback");
app.use(history());

app.use(express.static(__dirname+"/static"));

app.get("/person",(request,response) => { 
   
    response.send({ 
   
        name:"Nicholas",
        gender:'Male'
    })
})

app.listen(3000,(err) =>{ 
   
    if(!err) console.log("服务器启动了!");
})

在这里插入图片描述

  • 重启服务器,node server。
    在这里插入图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234265.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • navicat 15 fro Mysql激活码(注册激活)

    (navicat 15 fro Mysql激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlHQ…

  • VBA编程_常用函数总结1[通俗易懂]

    VBA编程_常用函数总结1[通俗易懂]文章目录IsEmptyReplaceAscMidRoundIsEmpty  用于判断单元格是否为空:SubMain()ActiveSheet.Cells(7,3).Value=1IfIsEmpty(ActiveSheet.Cells(7,3))ThenDebug.Print”IsEmpty”ElseDebug.Print”NotEmpty”EndIfEndSubReplace  函数原型如下

  • NIO与传统IO的区别

    NIO与传统IO的区别传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大。使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数量线程的线程池,甚至一个线程来为任意数量的连接服务。由于线程数量小于连接数量,所以每个线程进行IO操作时就不能阻塞,如果阻塞的话,有些连接就得不到处理,NIO提供了这种非阻塞的能力。小量的线…

  • matlab中如何调用lm算法,lm算法的matlab实现「建议收藏」

    matlab中如何调用lm算法,lm算法的matlab实现「建议收藏」inlm’);%下面使用遗传算法对网络进行优化P=XX;T=YY;R=size(P,1);S2=size(T,1);S1=25;%隐含层节点数S=R*S1+S1*S2+S1+S2;%遗传算法编码……实现nfc95p算法的matlab程序_数学_自然科学_专业资料。cleara…{on}|off]例子1用matlab实现对fmsinsin2…lm1;…

  • objectable_java throwable

    objectable_java throwable问题众所周知,Java中的Cloneable接口被破坏了。这有很多原因,我不会提及;others已经做到了。它也是Javaarchitects自己的立场。因此,我的问题是:为什么还没有被弃用?如果核心Java团队已经确定它已被破坏,那么他们也必须考虑弃用。他们这样做的原因是什么(在Java8中它是stillnotdeprecated)?#1热门回答(117赞)在1997年提交的abu…

    2022年10月14日
  • 第一篇提问艺术「建议收藏」

    第一篇提问艺术「建议收藏」虽然这是老话常谈,但是最近的回答问题的过程中,有点感触。你问题问的好,问的准确,回答你的人才有积极性给你答复,这样你又可以更快的解决你的问题。好多人不知道如何提问,所以我打算把这篇老文章转过来置顶。花点时间看看。如果没时间,至少看看下面的图吧:====================================================================

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号