VUE3 vite下的axios跨域

在使用 Vite 开发时,如果你的前端项目需要请求后端 API,且后端和前端不在同一个域上,可能会遇到跨域问题。跨域是指浏览器出于安全考虑,阻止了前端网页向不同源(域名、协议、端口)发送请求。

解决跨域问题的方法:

  1. 使用 Vite 的代理功能(推荐在开发环境下使用)
  2. 配置后端服务器的 CORS(跨源资源共享)(如果你有权限配置后端)
  3. 在前端代码中使用 axios 发起请求

在这里,我们主要关注 Vite 中的代理配置和 axios 如何与代理一起使用。


1. 配置 Vite 代理

Vite 提供了代理功能,可以通过配置 vite.config.js 文件,转发请求到指定的目标地址,从而避免浏览器的跨域问题。

1.1 配置 Vite 代理

假设你要请求的 API 地址是 https://api.example.com,你可以在 vite.config.js 中配置代理来解决开发时的跨域问题。

// vite.config.js
import { defineConfig } from 'vite';

export default defineConfig({
  server: {
    proxy: {
      // 代理路径
      '/api': {
        target: 'https://api.example.com', // 目标服务器地址
        changeOrigin: true, // 是否修改请求头中的 Origin 字段
        rewrite: (path) => path.replace(/^\/api/, ''), // 重写路径
      },
    },
  },
});
1.2 配置解析
  • /api:这个是你本地请求的路径。例如你请求 /api/user,Vite 会把这个请求代理到 https://api.example.com/user
  • target: 'https://api.example.com':这个是目标服务器的地址,Vite 会将请求转发到这个地址。
  • changeOrigin: true:这个选项让 Vite 修改请求头中的 Origin 字段,避免目标服务器拒绝请求。
  • rewrite: (path) => path.replace(/^\/api/, ''):这个配置会将路径中的 /api 替换为空,确保请求到目标服务器时路径正确。例如,/api/user 会被转发为 /user
1.3 请求示例

在前端代码中,使用 axios 发起请求:

import axios from 'axios';

axios.get('/api/user')
  .then(response => {
    console.log('API Response:', response.data);
  })
  .catch(error => {
    console.error('Error:', error);
  });

通过上述配置,当你访问 /api/user 时,Vite 会将请求转发到 https://api.example.com/user,并避免了跨域问题。


2. 配置 CORS(后端解决方案)

跨域问题是浏览器的安全限制,解决方案之一是在后端服务器上配置 CORS(跨源资源共享),允许来自不同源的请求。

假设你使用的是一个 Node.js 后端(比如 Express),你可以通过以下方法启用 CORS。

2.1 后端(Node.js + Express)启用 CORS

安装 cors 中间件:

npm install cors

然后在服务器代码中启用它:

// server.js
const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors()); // 允许所有来源的跨域请求

app.get('/api/user', (req, res) => {
  res.json({ user: 'John Doe' });
});

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

cors() 默认允许所有的跨域请求,你也可以通过传入配置来限制允许的域名:

app.use(cors({
  origin: 'http://localhost:5173', // 只允许来自这个地址的请求
}));

3. 使用 axios 发起跨域请求

3.1 发送 GET 请求

使用 axios 发起 GET 请求:

import axios from 'axios';

axios.get('https://api.example.com/user')
  .then(response => {
    console.log('User data:', response.data);
  })
  .catch(error => {
    console.error('Error:', error);
  });
3.2 发送 POST 请求

发送带有数据的 POST 请求:

import axios from 'axios';

const userData = { name: 'John Doe' };

axios.post('https://api.example.com/user', userData)
  .then(response => {
    console.log('User created:', response.data);
  })
  .catch(error => {
    console.error('Error:', error);
  });

4. 总结

  • Vite 的代理功能:在开发环境中使用,避免了浏览器的跨域限制,适用于前端与后端在不同域的开发环境。通过配置 vite.config.js 中的 server.proxy,可以将请求路径代理到目标 API 服务器。
  • CORS:后端服务器可以配置 CORS 来允许不同源的请求,从而解决跨域问题。如果你有权限修改后端,可以配置 CORS 以支持跨域请求。
  • axios:在前端使用 axios 发起请求,通过代理转发请求,或直接请求后端支持 CORS 的 API。

通过这些方法,你可以方便地解决跨域问题,确保你的前端应用能与后端 API 正常通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/955299.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈云计算19 | OpenStack管理模块 (上)

OpenStack管理模块(上) 一、操作界面管理架构二、认证管理2.1 定义与作用2.2 认证原理与流程2.2.1 认证机制原理2.2.2 用户认证流程 三、镜像管理3.1 定义与功能3.2 镜像服务架构3.3 工作原理与流程3.3.1 镜像存储原理3.3.2 镜像检索流程 四、计算管理4.…

探索 Transformer²:大语言模型自适应的新突破

目录 一、来源: 论文链接:https://arxiv.org/pdf/2501.06252 代码链接:SakanaAI/self-adaptive-llms 论文发布时间:2025年1月14日 二、论文概述: 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…

SpringBoot3-整合WebSocket指南

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞??收藏评论 SpringBoot3-整合WebSocket指南 1. 什么是WebSocket?2. 环境准备 2.1 项目依赖 3. WebSocket配置 3.1 WebSocket配置类3.2 自定义WebSocket处理器 4. 控制器5. 前端实现 5.1 HTML页面…

技术晋升读书笔记—办事的艺术

作为一名程序员,沟通能力对于我们这一行来说并不是强项。大多数程序员与电脑打交道的时间远远多于与人交流,特别工作一天有可能全程在与电脑打交道,因此沟通技巧的提升往往被忽视。然而,随着职业发展的推进,尤其在国内…

警惕IDEA 2024版重大Bug问题:LomBok失效、Gradle冲突、Spring Boot启动错误

一直以来我认为工具类的软件是越新越好,因为工具代表着一定的先进性;但是IDEA 2024好好的给我上了一课,比如lombok 不起作用、比如Spring Boot 3.4.x 启动报错、再比如MyBatis log plus冲突、再比如Gradle插件冲突. 一、Lombok 失效问题 请不…

01、flink的原理和安装部署

flink中主要有两个进程,分别是JobMManager和TaskManager,当然了根据flink的部署和运行环境不同,会有一些不同,但是主要的功能是类似的,下面我会讲下聊下,公司用的多的部署方式,基于yarn集群的部…

Vue2+OpenLayers实现车辆开始、暂停、重置行驶轨迹动画(提供Gitee源码)

前言:根据经纬度信息绘制一个完整的行驶路线,车辆根据绘制好的路线从开始点位行驶到结束点位,可以通过开始、暂停、重置按钮控制车辆状态。 目录 一、案例截图 二、安装OpenLayers库 三、​安装Element-UI ​ 四、代码实现 4.1、初始化…

两个React项目部署在同一个域名,一个主地址,一个子地址,二级白屏等问题

主域名配置的那个项目正常配置就可以了,但是对于子地址的项目,需要做很多的配置的。 注意 子地址的那个项目在配置中需要配置为子地址: base: /subpk 在vite.config.ts中修改: 如果这里没有配置正确,会导致白屏或者…

管理口令安全和资源(二)

DBMS_METADATA DBMS_METADATA 是 Oracle 数据库中的一个包,它提供了用于管理数据库元数据的工具和过程。元数据是关于数据的数据,它描述了数据库的结构,包括表、视图、索引、存储过程、用户和其他数据库对象的信息。DBMS_METADATA 包允许用户…

【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)

: 羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?spm1010.2135.3001.5343 在本篇文章中,博主将带大家去学习所谓的…

Kotlin Bytedeco OpenCV 图像图像57 图像ROI

Kotlin Bytedeco OpenCV 图像图像57 图像ROI 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apache.o…

Linux手写FrameBuffer任意引脚驱动spi屏幕

一、硬件设备 开发板&#xff1a;香橙派 5Plus&#xff0c;cpu&#xff1a;RK3588&#xff0c;带有 40pin 外接引脚。 屏幕&#xff1a;SPI 协议 0.96 寸 OLED。 二、需求 主要是想给板子增加一个可视化的监视器&#xff0c;并且主页面可调。 平时跑个模型或者服务&#xff0c;…

【Linux】gdb_进程概念

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

【k8s面试题2025】3、练气中期

体内灵气的量和纯度在逐渐增加。 文章目录 在 Kubernetes 中自定义 Service端口报错常用控制器Kubernetes 中拉伸收缩副本失效设置节点容忍异常时间Deployment 控制器的升级和回滚日志收集资源监控监控 Docker将 Master 节点设置为可调度 在 Kubernetes 中自定义 Service端口报…

飞牛 使用docker部署Watchtower 自动更新 Docker 容器

Watchtower是一款开源的Docker容器管理工具&#xff0c;其主要功能在于自动更新运行中的Docker容器 Watchtower 支持以下功能&#xff1a; 自动拉取镜像并更新容器。 配置邮件通知。 定时执行容器更新任务。 compose搭建Watchtower 1、新建文件夹 先在任意位置创建一个 w…

使用NetLimiter限制指定应用的网速

NetLimiter是一款用于网络流量监控和控制的软件&#xff0c;适合需要管理网络带宽的用户。在项目测试中&#xff0c;它帮助我对特定应用进行限速&#xff0c;合理分配网络资源&#xff0c;避免了因单一应用过度占用带宽而引发的网络问题。通过NetLimiter&#xff0c;我可以为每…

Python根据图片生成学生excel成绩表

学习笔记&#xff1a; 上完整代码 import os import re from openpyxl import Workbook, load_workbook from openpyxl.drawing.image import Image as ExcelImage from PIL import Image as PilImage# 定义图片路径和Excel文件路径 image_dir ./resources/stupics # 图片所…

56_多级缓存实现

1.查询Tomcat 拿到商品id后,本应去缓存中查询商品信息,不过目前我们还未建立Nginx、Redis缓存。因此,这里我们先根据商品id去Tomcat查询商品信息。此时商品查询功能的架构如下图所示。 需要注意的是,我们的OpenResty是在虚拟机,Tomcat是在macOS系统(或Windows系统)上,…

【Linux系统】Ext系列磁盘文件系统二:引入文件系统(续篇)

inode 和 block 的映射 该博文中有详细解释&#xff1a;【Linux系统】inode 和 block 的映射原理 目录与文件名 这里有几个问题&#xff1a; 问题一&#xff1a; 我们访问文件&#xff0c;都是用的文件名&#xff0c;没用过 inode 号啊&#xff1f; 之前总是说可以通过一个…

2024年博客之星年度评选—创作影响力评审入围名单公布

2024年博客之星活动地址https://www.csdn.net/blogstar2024 TOP 300 榜单排名 用户昵称博客主页 身份 认证 评分 原创 博文 评分 平均 质量分评分 互动数据评分 总分排名三掌柜666三掌柜666-CSDN博客1001002001005001wkd_007wkd_007-CSDN博客1001002001005002栗筝ihttps:/…