大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
问题背景
Axios是不允许跨域访问的,别说跨域,跨端口都不行。例如某项目我本地vue前端frontEnd为localhost:8889
,Java后台 backEnd为localhost:8888
报错信息: Access to XMLHttpRequest at 'http://localhost:8888/cert/certCompany/list2' from origin 'http://localhost:8889' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
axios请求代码:
axios.post('http://localhost:8888/cert/certCompany/list2',JSON.stringify(this.searchParam))
.then(function (response) {
console.log(response.data);
})
.catch(function (error) {
console.log(error);
});
这个时候就有两个方案了:
- 修改
frontEnd
前端,支持跨域(通过代理的形式,当然这种是伪跨域
,但是挺有用,前提是后端不限制即可)。 - 修改
backEnd
后台,支持跨域(同时限制可跨域名,不在本文讨论范围,且看过往处理方式):
SpringBoot之跨域过滤器配置允许跨域访问
SpringCloudApiGateway之支持Cors跨域请求
解决方案
main.js
引入axios
//引入axios by zhengkai.blog.csdn.net
import axios from 'axios'
Vue.prototype.$axios = axios
axios.defaults.baseURL = '/api' //自动附加在所有axios请求前面,则可以省略/api,直接写'/xxxx/xxx'。否则需要设置'/api/xxxx/xxx'
config.index.js
改造proxyTable
部分,引入虚拟代理
,请求target
这个地址的时候直接写成/api
即可。
dev: {
env: require('./dev.env'),
port: 8889,
autoOpenBrowser: true,
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
//axios跨域改造 by zhengkai.blog.csdn.net
'/api': {
target:'http://localhost:8888/cert/', // 你请求的第三方接口
changeOrigin:true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
pathRewrite:{
// 路径重写,
'^/api': '' // 替换target中的请求地址,也就是说/api=/target,请求target这个地址的时候直接写成/api即可。
}
}
},
// CSS Sourcemaps off by default because relative paths are "buggy"
// with this option, according to the CSS-Loader README
// (https://github.com/webpack/css-loader#sourcemaps)
// In our experience, they generally work as expected,
// just be aware of this issue when enabling this option.
cssSourceMap: false
}
业务.vue
修改请求为/api
封装开头(但是如果你的借口包含/api
的关键字的话,建议使用其他关键字)
//axios跨域请求改造 by zhengkai.blog.csdn.net
axios.post('/certCompany/list2',JSON.stringify(this.searchParam))
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
验证效果
请求不报错,没有烦人的No 'Access-Control-Allow-Origin' header is present on the requested resource.
报错。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194644.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...