提交
This commit is contained in:
90
src/utils/axios.js
Normal file
90
src/utils/axios.js
Normal file
@@ -0,0 +1,90 @@
|
||||
import axios from 'axios';
|
||||
import QS from 'qs';
|
||||
import router from '../router/index'
|
||||
//qs.stringify()是将对象 序列化成URL的形式,以&进行拼接
|
||||
// let protocol = window.location.protocol; //协议
|
||||
// let host = window.location.host; //主机
|
||||
// axios.defaults.baseURL = protocol + "//" + host;
|
||||
axios.defaults.baseURL = 'https://app.gter.net'
|
||||
|
||||
axios.interceptors.request.use( //响应拦截
|
||||
async config => {
|
||||
// 每次发送请求之前判断vuex中是否存在token
|
||||
// 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况
|
||||
// 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
|
||||
config.headers.token = sessionStorage.getItem('token')
|
||||
if (process.env.NODE_ENV == "development") config['headers']['authorization'] = "x2mmnl9grt51bpplj2k6ioiuummzhnw3"
|
||||
return config;
|
||||
},
|
||||
error => {
|
||||
return Promise.error(error);
|
||||
})
|
||||
// 响应拦截器
|
||||
axios.interceptors.response.use(
|
||||
response => {
|
||||
if (response.status === 200) return Promise.resolve(response); //进行中
|
||||
else return Promise.reject(response); //失败
|
||||
|
||||
},
|
||||
// 服务器状态码不是200的情况
|
||||
error => {
|
||||
if (error.response.status) {
|
||||
switch (error.response.status) {
|
||||
// 401: 未登录
|
||||
case 401:
|
||||
break
|
||||
// 403 token过期
|
||||
// 清除本地token和清空vuex中token对象
|
||||
// 跳转登录页面
|
||||
case 403:
|
||||
router.push('/login')
|
||||
break
|
||||
// 404请求不存在
|
||||
case 404:
|
||||
break;
|
||||
// 其他错误,直接抛出错误提示
|
||||
default:
|
||||
}
|
||||
return Promise.reject(error.response);
|
||||
}
|
||||
}
|
||||
);
|
||||
/**
|
||||
* get方法,对应get请求
|
||||
* @param {String} url [请求的url地址]
|
||||
* @param {Object} params [请求时携带的参数]
|
||||
*/
|
||||
const $get = (url, params) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
axios.get(url, {
|
||||
params: params,
|
||||
}).then(res => {
|
||||
resolve(res.data);
|
||||
}).catch(err => {
|
||||
reject(err.data)
|
||||
})
|
||||
});
|
||||
}
|
||||
/**
|
||||
* post方法,对应post请求
|
||||
* @param {String} url [请求的url地址]
|
||||
* @param {Object} params [请求时携带的参数]
|
||||
*/
|
||||
const $post = (url, params) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
//是将对象 序列化成URL的形式,以&进行拼接
|
||||
axios.post(url, QS.stringify(params)).then(res => {
|
||||
resolve(res.data);
|
||||
}).catch(err => {
|
||||
reject(err.data)
|
||||
})
|
||||
});
|
||||
}
|
||||
//下面是vue3必须加的,vue2不需要,只需要暴露出去get,post方法就可以
|
||||
export default {
|
||||
install: (app) => {
|
||||
app.config.globalProperties['$get'] = $get;
|
||||
app.config.globalProperties['$post'] = $post;
|
||||
app.config.globalProperties['$axios'] = axios;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user