【Vue.js】Vue3全局配置Axios并解决跨域请求问题_vue3axios跨域-程序员宅基地

技术标签: Vue  前端  vue.js  javascript  

系列文章目录


背景

对于前后端分离项目,前端和后端端口不能重复,否则会导致前端或者后端服务起不来。例如前端访问地址为: http://localhost:8080/ ,后端访问地址为 http://localhost:8081/ 。后端写好Controller,当用Axios访问该接口时,将会报错:

Access to XMLHttpRequest at ' http://localhost:8081/login ' from origin ' http://localhost:8080 ' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

本文内容从axios部署开始到解决跨域问题。

前端: Vue3;Axios 1.6.0 ;Element-Plus
后端:Springboot 2.7.14

这里提供两种解决方案,都是基于后端跨域访问的配置,前端不作任何允许跨域访问的设置,因为试过无效。

一、部署Axios

Axios的基本介绍:
(1)axios 是一个基于promise的HTTP库,支持promise所有的API
(2)浏览器端/node端(服务器端)都可以使用,浏览器中创建XMLHttpRequests
(3)支持请求/响应拦截器
(4)它可以转换请求数据和响应数据,并对响应回来的内容自动转换成 JSON类型的数据
(5)批量发送多个请求
(6)安全性更高,客户端支持防御XSRF

1. npm 安装 axios

npm install axios

2. 创建 request.js,创建axios实例

在项目根目录下,也就是src目录下创建文件夹api/,并创建request.js ,该js用于创建axios实例。

import axios from "axios";
const api = axios.create(
	{
     
		baseURL: "http://localhost:8081", //这里配置的是后端服务提供的接口
		timeout: 1000 
	}
);
export default api;

在这里,我们自定义axois实例化对象,配置了默认的访问i后端ip和端口等,并在末尾使用export 导出api配置,便于在其他单文件中引入 request.js. 除了定义上述的配置,我就没有在前端配置其他的了,跨域请求在后端配置。

3. 在main.js中全局注册axios

import {
     createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import axios from "./api/request.js"; //引入request.js
import "element-plus/dist/index.css";
import ElementPlus from "element-plus";
const app = createApp(App);
app.use(router);
app.use(ElementPlus);
app.provide("$axios", axios);
app.mount("#app");
// 全局挂载 axios
app.config.globalProperties.$axios = axios; //配置axios的全局引用

注意,import axois,我们引入的不是官方的aoixs库,而是自定义的axios.

4. 在页面中使用axios

本页面使用的是Element-plus UI,定义一个点击事件:

 <el-button class="login_button" type="primary" @click="login"
      >登录</el-button>

<script setup>
import {
     reactive } from "vue";
import api from "@/api/request.js"; //引入api
//测试请求方法
const login = function () {
    
  api({
     url: "/test", method: "get" }).then((res) => {
    
  alert("请求成功!");
  console.log(res);
   		}
   );

Axios是支持Promise API的,不熟悉的朋友可以看:Promise API 格式

二、后端解决跨域请求问题

下面是后端解决Axios解决跨域请求的两种方式。

方法一 解决单Contoller跨域访问

方案一:在需要访问的Controller接口上添加注解:

	@CrossOrigin(origins ="*" ,maxAge = 3600)
    @GetMapping("/test")
    public ApiResult test() {
    
        return ApiResultHandler.buildApiResult(200, "hello!", null);
    }

这种方式需要每个访问接口都需要添加,比较繁琐。

方法二 全局解决跨域问题

方案二:配置跨域请求配置类

自己创建一个config包,创建CorsConfig类。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CorsConfig {
    
    /**
     * 当前跨域请求最大有效时长。这里默认1天
     */
    private static final long MAX_AGE = 24 * 60 * 60;

    @Bean
    public CorsFilter corsFilter() {
    
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 1 设置访问源地址
        corsConfiguration.addAllowedOrigin("*");
        // 2 设置访问源请求头
        corsConfiguration.addAllowedHeader("*");
        // 3 设置访问源请求方法
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setMaxAge(MAX_AGE);
        // 4 对接口配置跨域设置
        source.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(source);
    }
}

这个配置好了就可以了,其他的不需要动。

结果:
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/SKMIT/article/details/134226890

智能推荐

本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。_,可以帮助她计算字符串a b的结果,即从字符串a中把字符串b所包含的字符全删-程序员宅基地

文章浏览阅读7.4k次,点赞3次,收藏8次。本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。输入格式:输入在2行中先后给出字符串A和B。两字符串的长度都不超过10​4​​ ,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。输出格式:在一行中打印出A−B的结果字符串。输入样例:I love GPLT! It’s a fun game!aeiou输出样例:I lv GPLT! It’s fn gm!解题思路:_,可以帮助她计算字符串a b的结果,即从字符串a中把字符串b所包含的字符全删

移动物联网简介_物联网业务pcf-程序员宅基地

文章浏览阅读3k次。物联网核心网的总体网络组织架构如图所示,主要核心网元及平台包括HLR/HSS(物联卡号码及用户数据存储)、PGW(用于疏通物联卡用户的数据业务)、CG(存储物联卡用户的计费话单)、短信中心(用于物联卡终端短信的转发)、PBOSS/CMIOT(业务受理开通、计费话单采集等)、物联网运营管理平台(OneLink平台,负责全网业务的运营支撑,实现物联网业务运营管理、通信管理、能力管理等)、业务网关(提供M-SMSC与业务平台间短信的转发)。由于5G的更新,通信能力的不断升级换代,2G网络已陆续进行减频。_物联网业务pcf

flowable 配置自定义表单_web工作流管理系统开发之四 自定义表单-程序员宅基地

文章浏览阅读2.2k次。在开发工作流管理系统时,很多人只重视流程引擎,流程模型的建立,而忽略了自定义表单工具。自定义表单工具是实现独立业务模块的可视化编辑工具,业务模块可以通过这种工具编辑生成。如果单纯从流程实现来说,确实自定义表单不是重点,流程实现了,可以挂接上表单就可以了。至于表单业务模块,可以是表单工具生成的,也可以是代码编写的表单,总之能用代码来实现的是最灵活的。但实际上流程的每一个步骤的业务数据都需要靠表单来展...

matlab二进制数字基带传输系统仿真实践——通信原理篇——信噪比与误码率的计算_误码率和信噪比的关系公式-程序员宅基地

文章浏览阅读2.4w次,点赞31次,收藏220次。这里先明确几个点:S:信号平均功率N:噪声平均功率Eb:每bit的信号能量N0:噪声功率谱密度Es:符号信号的能量Rb:传信率,即每秒传输的bit数目W(B):带宽Ts(Tb):采样点的时间间隔k:每个符号包含的bit数目其中Es=Eb*k,Rb=k/Ts..._误码率和信噪比的关系公式

rv1126之硬盘测速_rv1126的内存读写速度-程序员宅基地

文章浏览阅读305次。rv1126 不同接入的硬盘测速_rv1126的内存读写速度

Windows7 搭建靶场xssplatform_xss-platform.rar-程序员宅基地

文章浏览阅读182次。Windows7 phpstudy_pro小皮面板,环境是apache2.4.39+MySQL5.7.26+php7.0.9来搭建xssplatform靶场_xss-platform.rar

随便推点

2020-02-02-程序员宅基地

文章浏览阅读68次。目前中国国内的第三方支付产品主要有网关/快捷/微信/支付宝等。其中用户数量最大的是网关支付/微信/支付宝. 第三方支付接口申请提供资料: 关于个人申请第三方支付接口:第三方支付接口个人申请的或者企业申请的,请联系QQ 66322016 申请,因为有些支付接口平台不提供个人支付接口的申请。 第三方支付接口如何对接流程: 第一步:签订合约通过第三方拿到接口,拿到接口后,要确认下接口类型,是否是自己需要...

MATLAB 在一个数组中随机选择n个数_matlab从数组中随机选取几个数-程序员宅基地

文章浏览阅读5.6w次,点赞29次,收藏143次。MATLAB 中在一个数组内随机选择n个数。例如:在 A = [10, 50, 80, 100, 130, 260] 中随机选择5个数。允许重复:n = 5;A = [10, 50, 80, 100, 130, 260];random_num = A(randi(numel(A),1,n));random_num = sort(random_num);不允许重复:n = 5;A = [10, 50, 80, 100, 130, 260];random_num = A(randperm(_matlab从数组中随机选取几个数

赛扬处理器_有问有答:怎么认识电脑处理器的划分?比如英特尔i5i7这些代表什么意思?...-程序员宅基地

文章浏览阅读223次。首选我们要知道现在电脑处理器的品牌有两个一个是Intel另一个是AMD,他们两家现在的命名规则基本都是相近的,Intel家的酷睿系列是主力产品,而AMD方面则以锐龙系列处理器作为主力,下面先来说说Intel家的。Inetl家的桌面酷睿处理器下面细分出酷睿i3/i5/i7/i9这四个等级,这是按处理器的核心数以及线程数划分的,而频率与缓存容量只会影响后面的数字,而现在HEDT也就是高端桌面..._i3 i5 i7 i9处理器都是一样生产的

计算机毕业设计Node.js+Vue智能家电商城(程序+源码+LW+部署)_vuenode家电商城-程序员宅基地

文章浏览阅读77次。该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:项目技术:Express框架 + Node.js+ Vue 等等组成,B/S模式 +Vscode管理+前后端分离等等。环境需要1.运行环境:最好是Nodejs最新版,我们在这个版本上开发的。其他版本理论上也可以。2.开发环境:Vscode或HbuilderX都可以。推荐HbuilderX;3.mysql环境:建议是用5.7版本均可4.硬件环境:windows 7/8/10 1G内存以上;_vuenode家电商城

向量点乘是什么意思-程序员宅基地

文章浏览阅读517次。向量点乘是指在线性代数中对两个向量进行的运算。向量点乘的结果是一个标量(即一个单独的数字)。向量点乘的运算规则如下:如果两个向量的维数相同,则向量点乘的结果是两个向量的对应元素的积的和。例如,如果有两个二维向量 $\mathbf{a}=(a_1,a_2)$ 和 $\mathbf{b}=(b_1,b_2)$,则它们的点乘结果为:$$\mathbf{a} \cdot \mathbf{b} = a..._点乘 啥意思