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

news/2024/9/18 13:33:24/ 标签: 前端, vue.js, javascript

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; //声明一个…

利用AI驱动智能BI数据可视化-深度评测Amazon Quicksight(四)

简介 随着生成式人工智能的兴起,传统的 BI 报表功能已经无法满足用户对于自动化和智能化的需求,今天我们将介绍亚马逊云科技平台上的AI驱动数据可视化神器 – Quicksight,利用生成式AI的能力来加速业务决策,从而提高业务生产力。…

C#环境搭建和入门教程--vs2022之下

目录 1.环境搭建 2.先让程序跑起来 3.C#代码结构 4.变量,输入输出介绍 5.内容输入和类型转换 1.环境搭建 我们的这个c#基础学习主要就是在这个vs2022上面进行的,我们的这个c/c使用的都是这个平台 我们首先检查一下我们的这个环境是不是完全的配置了…

大数据新视界 --大数据大厂之数据科学项目实战:从问题定义到结果呈现的完整流程

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

WebSocket 协议

原文地址:xupengboo WebSocket WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。…

基于SSM的在线家教管理系统(含源码+sql+视频导入教程+文档+PPT)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的在线家教管理系统拥有三个角色 管理员:用户管理、教师管理、简历管理、申请管理、课程管理、招聘教师管理、应聘管理、评价管理等 教师:课程管理、应聘…

Weakly-Supervised Video Moment Retrieval via Semantic Completion Network 论文阅读

Weakly-Supervised Video Moment Retrieval via Semantic Completion Network 论文阅读 AbstractIntroductionRelated WorkApproachProblem FormulationProposal Generation ModuleSemantic Completion ModuleTraining of Semantic Completion NetworkNetwork Design Experimen…

SpringBootAdmin源码修改编译002_踩坑记录一堆坑_记录过程_没有成功---VUE工作笔记0027

当前版本是18.19.0 我本地安装的node npm install 执行的时候报错了.上面的错误 说node-ipc@9.2.2的版本 需要使用node 8 10 12 14 16 17的版本,而我安装的是 18.19.0的版本. 这个时候的解决方案是提升node-ipc组件的版本. 可以看到在npmjs网站上找到,对应的组件node-ipc 可…

物联网——DMA+AD多通道

DMA简介 存储器映像 某些数据在运行时不会发生变化,则设置为常量,存在Flash存储器中,节省运行内存的空间 DMA结构图 DMA访问权限高于cpu 结构要素 软件触发源:存储器到存储器传输完成后,计数器清零 硬件触发源&…

系统架构设计师 需求分析篇二

📘 面向对象分析方法 1. 用例模型 📈 构建用例模型一般需要经历 4 个阶段: 识别参与者 🔍:识别与系统交互的所有事物。合并需求获得用例 🔗:将需求分配给予其相关的参与者。细化用例描述 &am…

宠物空气净化器应该怎么选择才能选到除毛效果好的产品

朋友在前三个月的时候养了三只猫,每天都乐此不疲地陪玩。看似美好,实则为了猫咪和她妈妈闹过几次离家出走。 最主要的就是现在已经开始换季了,空气中的水含量减少,空气开始变干,路上的粉尘都慢慢的飞扬起来&#xff0…

C语言6大常用标准库 -- 2.<stdlib.h>

目录 引言 2. C标准库--stdlib.h 2.1 简介 2.2 库变量 2.3 库宏 2.4 库函数 2.5 注意事项 🌈你好呀!我是 程序猿 🌌 2024感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长&…

Python酷库之旅-第三方库Pandas(120)

目录 一、用法精讲 531、pandas.DataFrame.reindex_like方法 531-1、语法 531-2、参数 531-3、功能 531-4、返回值 531-5、说明 531-6、用法 531-6-1、数据准备 531-6-2、代码示例 531-6-3、结果输出 532、pandas.DataFrame.rename方法 532-1、语法 532-2、参数 …