history模式与hash模式的区别

发布于:2022-11-29 ⋅ 阅读:(199) ⋅ 点赞:(0)

我们先观察浏览器地址栏

是不是在大部分浏览器路径中都可以看到这个带#号的路径 

在前端中有两种工作模式分别是hash和history

hash(哈西)

 #号后面的都算hash值 ( 例 : 图上模式)  #号后面的值不会作为路径发送给服务器

优点:兼容性好

缺点:带#号不好看

history

 优点:兼容略差

缺点:路径好看(不带#号)

问:那我们怎么决定模式呢?

答:mode:'hash/history'

例如:index.js

export default  new VueRouter({
  //写在这里
    mode:'history',

	routes:[
		{
			name:'XXX',
			path:'XXX',
			component:XXX,
		},

})

问:那我们怎么打包

答:在package.json文件中 找到build文件 其中serve是用于运行文件的 

       而build能把我们写的东西生成最纯粹的HTML CSS JavaScript文件

//打包代码
vue-cli-service build

再寻找那个特殊文件夹就可以了 dist

注意:只打包src目录下文件

打包出来的文件必须要放在服务器上才可以使用 ———‘部署’

使用node.js和express搭建一个微型服务器 再部署上去  

以下的东西看不懂很正常 如果需要知识面较广,可以了解一下。

第一步 npm init  

npm init //变成一个合理的包

第二步 npm i express

 npm i express //安装express

第三步 引入express

//引入express
const express =require('express')

//用一个app把他接住
const app=express()

//配置后段路由  /person  返回人的信息 
//req- request  res-response 
app.get('/person',(rēq,res)=>{
   res.sent({   //给客户端
         name:’tom‘,
         age:18
  })

})
//端口监听
app.listen(端口号,(err)=>{
     if(!err) console.log('服务器启动成功了!')  
})

第四步 启动服务器  node server

node server  //启动服务器

第五步 新建一个文件夹 一般叫 static(静态的)

            里面放一些前端写完的东西 

问: 怎么把页面让服务器去认识呢

答:我们一般是使用中间去完成 

//const app=require('express')

//中间介  express身上有个中间介 static 专门用于指定静态资源 需要传入一个路径
app.use(express.static(__dirname+'/static'))  

第六步 启动服务器  node server

就可以看到index.html页面了 默认打开index页面 如果不是名字index需要在路径处输入名字

第七步 把之前打包好的html css 和javascript文件复制过去  项目可以部署在服务器上

也可以正常跳转 但是我们发现他没有发生网络请求 一刷新就会出现问题 见下图 

(上刷新下网络请求)

 

 这是属于history存在路径问题

因为没有#号后面都是路径 而在我们的服务器中没有这个路径就会报错  而我们可以点击切换是因为前端路由跳转

hash模式 就不会存在这些问题 因为#后边的这些东西不算是 资源找服务器去要

关于history 404 问题的解决办法:

需要后端人员  

我们使用node.js解决该问题

使用服务器中间介connect- history-api- fallback

代码在npm 网站中 

第一步:

//在服务器中运行
npm install --save connect-history-api-fallback

第二步:

//引入
const history = require('connect-history-api-fallback');

第三步:

//使用  必须在静态资源之前进行使用
app.use(history())
//中间介  express身上有个中间介 static 专门用于指定静态资源 需要传入一个路径
app.use(express.static(__dirname+'/static'))

本文含有隐藏内容,请 开通VIP 后查看