DAY20240911 VUE:解锁前端路由的奥秘:如何在单页应用中避免404困境?

news/2024/11/15 0:34:46/

VUE:路由模式:解锁前端路由的奥秘:如何在单页应用中避免404困境?

    • 前言
    • 路由模式
    • 常见问题
      • 1. 先有后端路由,再有前端路由
      • 2. 浏览器分不清是前端路由还是后端路由
      • 3. 发布和打包
      • 4. 解决404问题的方法
    • 参考


前言

小知识:在Web开发中,“前后端分离”和“后端渲染模板”是两种常见的架构模式,它们的区别在于如何渲染页面和如何处理路由。
在这里插入图片描述

路由模式

前端开发中,常见的路由模式有两种:Hash模式和History模式

Hash模式:URL中包含#(例如www.example.com/#/home),其后的部分被视为前端路由。浏览器不会将#后的部分发送到服务器,因此只在前端处理。这种模式实现简单,适用于不需要后端参与的单页应用路由。

History模式:使用HTML5的history.pushState API来实现无#的路由(例如www.example.com/home)。此模式下,URL结构更美观,对SEO更友好,但需要服务器配置以确保所有路由都指向同一个入口文件,否则在刷新页面时会导致404错误。
参考下图url对应的即为history模式
请添加图片描述
修改我们自己的代码,index.js中 加一句 mode:‘history’,就可以改为没有#形式的url。
请添加图片描述
测试如下图所示,url中没有了#,测试成功!
请添加图片描述

常见问题

前后端分离架构中的路由处理问题,特别是在使用History 模式时,浏览器如何区分前端路由和后端路由。?

1. 先有后端路由,再有前端路由

在前后端分离的架构中,通常会有两种类型的路由:

后端路由:后端服务器处理的路由。通常用于API接口,如/api/users、/api/posts等。这些请求会直接发送到服务器,服务器会根据路径返回相应的数据或页面。

前端路由:前端框架(如React、Vue、Angular)使用的路由,用于管理单页应用(SPA)内部的页面跳转,如/home、/about等。这些路由是由前端代码来管理的,不需要后端处理。

“先有后端路由,再有前端路由” 的意思是,在配置服务器时,先要确保所有的后端路由(例如API接口)都正确配置和处理。然后,任何没有被后端路由匹配到的请求都应该交给前端路由来处理。

2. 浏览器分不清是前端路由还是后端路由

当你使用History模式时,**浏览器会认为所有的URL路径(如/home、/about等)都是需要向后端服务器发送请求的。**如果服务器没有为这些路径配置路由处理,就会返回404错误。这是因为浏览器不知道这些路径实际上是由前端框架管理的前端路由。

解决方法

开发时:配置后端服务器,使它能够识别哪些请求是前端路由。在开发环境中,可以通过设置一个规则:“凡是不接受的接口请求,都返回同一个 index.html 页面”,然后前端框架接管路由。这样,无论用户访问什么路径,服务器都会返回前端应用的主页面(如 index.html),然后由前端框架处理具体的路由。

3. 发布和打包

当你发布前端应用时,通常需要将前端代码打包为一个静态文件,这些文件通常存储在一个叫做dist(distribution)文件夹中。

npm run build:这是一个常见的命令,用于打包前端应用。它会把你的源代码(JavaScript、CSS、HTML等)打包成优化的静态文件,并生成一个dist文件夹。

dist 文件夹:这个文件夹包含了你的前端应用的所有静态文件,通常会上传到后端服务器或CDN(内容分发网络)。在生产环境中,服务器会用这个文件夹中的静态文件来响应用户请求。

4. 解决404问题的方法

当你发布应用时,为了避免History模式造成的404问题,通常会进行以下配置

服务器配置:配置服务器(如Nginx、Apache)确保所有请求都指向index.html。例如,Nginx 配置可以这样做
location / {
try_files $uri $uri/ /index.html;
}

请添加图片描述

参考

【1】 https://b23.tv/Hhfpaz2


http://www.ppmy.cn/news/1526833.html

相关文章

HarmonyOS开发之使用Picker(从相册选择图片),并且通过Swiper组件实现图片预览

一:效果图: 二:添加依赖 import picker from ohos.file.picker; 三:创建showDialog showDialog() {AlertDialog.show({message: 从相册选择,alignment: DialogAlignment.Bottom,offset: { dx: 0, dy: -12 },primaryButton: {val…

基于LSTM-Adaboost的多输入单输出回归预测神经网络【MATLAB】

LSTM-Adaboost多输入单输出回归预测是一个结合了长短期记忆网络(LSTM)和AdaBoost算法的回归模型,旨在处理时间序列数据或具有时间依赖性的多输入数据。下面是对这个模型的详细介绍: 1. LSTM(长短期记忆网络&#xff0…

Rust在Web开发中的优势是什么?

作为一种系统级编程语言,Rust在安全性和性能方面拥有得天独厚的优势,使其在Web开发领域展现出强大的竞争力。 1. 内存安全:告别内存泄漏和缓冲区溢出 Rust的核心优势之一就是其强大的内存安全机制。通过所有权系统和借用检查器,…

深度学习速通系列:命名实体识别

命名实体识别(NER)是自然语言处理(NLP)中的一项基础技术,它能够从文本中识别出具有特定意义的实体,如人名、地名、组织名等。NER在信息提取、问答系统、句法分析、机器翻译等领域有着广泛的应用。 NER的技…

数据结构之线性表(python)

华子目录 线性表的定义前驱与后继 1.顺序表(顺序存储结构)python列表与数组的区别列表数组 1.1插入数据实例 1.2删除元素实例 1.3查找元素1.4修改元素1.5综合示例 2.单链表2.1单链表的初始化2.2插入元素示例注意 2.3删除元素示例 2.4修改元素2.5查找元素…

sourcetree配置ssh连接gitee

使用PuttyGen.exe生成的公钥私钥格式和git文档方法生成的不一样, SSH 公钥设置 | Gitee 帮助中心 gitee方法生成的公钥类似: ssh-ed25519 AAAA***5B Gitee SSH Key PuttyGen.exe生成的: 公钥 ---- BEGIN SSH2 PUBLIC KEY ---- Comment:…

Haption力反馈设备在机器人遥操作中的应用优势

在工业、医疗、科研等多个领域,机器人遥操作正在成为一项关键技术,它允许操作者在远离实际工作环境的情况下,通过远程控制系统对机器人进行精准操作。Haption Virtuose力反馈设备作为遥操作系统中的重要组成部分,其应用优势日益凸…

JAVA学习笔记01-变量的初始化

package day01; public class VarDemo { public static void main(String[] args) { int a; //int b,c,d; // int a; int e 300; //声明一个int(整数)的变量名为e并为e存储了300这样的整数数据 声明时并初始化 int f; //声明一个…