vue使用axios 开发环境与生产环境同时设置代理
前后端分离开发难免会遇到跨域问题,使用axios需要设置代理服务器,还要满足开发环境和生产环境同时运行正常,具体实现如下:vue.config.jsmodule.exports = {devServer: {//proxy:"http://localhost:8080",host: "localhost",port: 8081,proxy: {// axios跨域代理实现'
·
前后端分离开发难免会遇到跨域问题,使用axios需要设置代理服务器,还要满足开发环境和生产环境同时运行正常,具体实现如下:
vue.config.js
module.exports = {
devServer: {
//proxy:"http://localhost:8080",
host: "localhost",
port: 8081,
proxy: {
// axios跨域代理实现
'/api': {
target:'http://localhost:8080', //请求的第三方接口
changeOrigin:true, // 在本地会创建一个虚拟服务端
pathRewrite:{ // 路径重写
'^/api': ''
}
}
}
},
};
main.js添加如下代码
import Axios from 'axios'
/*设置baseURL*/
let baseURL = '/api';
// process.env.NODE_ENV 用于判断当前运行环境,根据 npm run serve 或 npm run build
if (process.env.NODE_ENV === 'production') {
baseURL = 'http://localhost:8080';
}
Axios.defaults.baseURL = baseURL//自动附加在所有axios请求前面,可直接写'/xx/xx'。否则需要设置'/api/xx/xx'
使用一(axious):
import Axios from 'axios'
async getTableData(XXX,XXX,XXX){
var dataList = [];
var count = 0;
var url = "/XXXX/XX";
await Axios.post( url , {},
{
headers: {
"Content-Type":"application/json;charset=utf-8",
"Access-Control-Allow-Origin":"*",
"Access-Control-Allow-methods":"OPTIONS"
},
withCredentials : true
}).then(function(returnData) {// 这里是处理正确的回调
dataList = returnData.data.dataList;
count = returnData.data.count;
}).catch( function(response) {// 这里是处理错误的回调
console.log(response);
});
}
此写法是同步请求,若无此需求async 和await 可以不加。因为是跨域,还设置了headers。
此时url会在前面自动加上之前设置好的/api,去创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据。
使用二(window.href.url):
import Axios from 'axios'
var url = Axios.defaults.baseURL + "/XXXX/XX";
window.location.href = url;//数据接口
使用非axious时需要加/api前缀(例如:/api/XXXX/XX)访问才行,但是加了/api后,生产环境不能帮你拿到对应的前缀。所以可以直接使用之前设置好的Axios.defaults.baseURL,这样就不会找不到了。
更多推荐
已为社区贡献2条内容
所有评论(0)