技术标签: 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这里提供两种解决方案,都是基于后端跨域访问的配置,前端不作任何允许跨域访问的设置,因为试过无效。
Axios的基本介绍:
(1)axios 是一个基于promise的HTTP库,支持promise所有的API
(2)浏览器端/node端(服务器端)都可以使用,浏览器中创建XMLHttpRequests
(3)支持请求/响应拦截器
(4)它可以转换请求数据和响应数据,并对响应回来的内容自动转换成 JSON类型的数据
(5)批量发送多个请求
(6)安全性更高,客户端支持防御XSRF
npm install 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. 除了定义上述的配置,我就没有在前端配置其他的了,跨域请求在后端配置。
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.
本页面使用的是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解决跨域请求的两种方式。
方案一:在需要访问的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);
}
}
这个配置好了就可以了,其他的不需要动。
结果:
文章浏览阅读7.4k次,点赞3次,收藏8次。本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。输入格式:输入在2行中先后给出字符串A和B。两字符串的长度都不超过104 ,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。输出格式:在一行中打印出A−B的结果字符串。输入样例:I love GPLT! It’s a fun game!aeiou输出样例:I lv GPLT! It’s fn gm!解题思路:_,可以帮助她计算字符串a b的结果,即从字符串a中把字符串b所包含的字符全删
文章浏览阅读3k次。物联网核心网的总体网络组织架构如图所示,主要核心网元及平台包括HLR/HSS(物联卡号码及用户数据存储)、PGW(用于疏通物联卡用户的数据业务)、CG(存储物联卡用户的计费话单)、短信中心(用于物联卡终端短信的转发)、PBOSS/CMIOT(业务受理开通、计费话单采集等)、物联网运营管理平台(OneLink平台,负责全网业务的运营支撑,实现物联网业务运营管理、通信管理、能力管理等)、业务网关(提供M-SMSC与业务平台间短信的转发)。由于5G的更新,通信能力的不断升级换代,2G网络已陆续进行减频。_物联网业务pcf
文章浏览阅读2.2k次。在开发工作流管理系统时,很多人只重视流程引擎,流程模型的建立,而忽略了自定义表单工具。自定义表单工具是实现独立业务模块的可视化编辑工具,业务模块可以通过这种工具编辑生成。如果单纯从流程实现来说,确实自定义表单不是重点,流程实现了,可以挂接上表单就可以了。至于表单业务模块,可以是表单工具生成的,也可以是代码编写的表单,总之能用代码来实现的是最灵活的。但实际上流程的每一个步骤的业务数据都需要靠表单来展...
文章浏览阅读2.4w次,点赞31次,收藏220次。这里先明确几个点:S:信号平均功率N:噪声平均功率Eb:每bit的信号能量N0:噪声功率谱密度Es:符号信号的能量Rb:传信率,即每秒传输的bit数目W(B):带宽Ts(Tb):采样点的时间间隔k:每个符号包含的bit数目其中Es=Eb*k,Rb=k/Ts..._误码率和信噪比的关系公式
文章浏览阅读305次。rv1126 不同接入的硬盘测速_rv1126的内存读写速度
文章浏览阅读182次。Windows7 phpstudy_pro小皮面板,环境是apache2.4.39+MySQL5.7.26+php7.0.9来搭建xssplatform靶场_xss-platform.rar
文章浏览阅读68次。目前中国国内的第三方支付产品主要有网关/快捷/微信/支付宝等。其中用户数量最大的是网关支付/微信/支付宝. 第三方支付接口申请提供资料: 关于个人申请第三方支付接口:第三方支付接口个人申请的或者企业申请的,请联系QQ 66322016 申请,因为有些支付接口平台不提供个人支付接口的申请。 第三方支付接口如何对接流程: 第一步:签订合约通过第三方拿到接口,拿到接口后,要确认下接口类型,是否是自己需要...
文章浏览阅读241次。_equestlayout 和 invaildate 和 postinvaildate区别
文章浏览阅读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从数组中随机选取几个数
文章浏览阅读223次。首选我们要知道现在电脑处理器的品牌有两个一个是Intel另一个是AMD,他们两家现在的命名规则基本都是相近的,Intel家的酷睿系列是主力产品,而AMD方面则以锐龙系列处理器作为主力,下面先来说说Intel家的。Inetl家的桌面酷睿处理器下面细分出酷睿i3/i5/i7/i9这四个等级,这是按处理器的核心数以及线程数划分的,而频率与缓存容量只会影响后面的数字,而现在HEDT也就是高端桌面..._i3 i5 i7 i9处理器都是一样生产的
文章浏览阅读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..._点乘 啥意思