import axios from "axios"; // 引入axios
|
import qs from "qs"; // 引入qs
|
import store from "../store";
|
import APIUrl from "../config/index"; // 引入config
|
import router from "../router";
|
import { Message } from "element-ui";
|
|
// axios 默认配置 更多配置查看Axios中文文档
|
axios.defaults.timeout = 50000; // 超时默认值
|
axios.defaults.baseURL = APIUrl.baseURL; // 默认baseURL
|
axios.defaults.responseType = "json"; // 默认数据响应类型
|
// axios.defaults.headers.common["Content-Type"] =
|
// "application/json;charset=UTF-8";
|
axios.defaults.headers.common["Content-Type"] =
|
"application/x-www-form-urlencoded";
|
axios.defaults.withCredentials = true; // 表示跨域请求时是否需要使用凭证
|
|
// http request 拦截器
|
// 在ajax发送之前拦截 比如对所有请求统一添加header token
|
axios.interceptors.request.use(
|
(config) => {
|
config.headers["lang"] = localStorage.getItem("language")
|
? localStorage.getItem("language")
|
: "en";
|
var token = store.state.token || window.localStorage.getItem("tokens");
|
config.headers["USERTOKEN"] = token ? token : "";
|
return config;
|
},
|
(err) => {
|
return Promise.reject(err);
|
}
|
);
|
|
// http response 拦截器
|
// ajax请求回调之前拦截 对请求返回的信息做统一处理 比如error为401无权限则跳转到登陆界面
|
axios.interceptors.response.use(
|
(response) => {
|
// console.log("response", response);
|
// 需要登录确没有登录时跳转到登录页面
|
if (response.data && response.data.status === 401) {
|
store.commit("undataToken", null);
|
window.localStorage.removeItem("USERTOKEN");
|
router.push("/login");
|
Message({
|
message: response.data.msg,
|
type: "warning",
|
});
|
return response.data;
|
}
|
// 正常通过获取到数据时
|
else if (response.data.status === 0) {
|
return response.data;
|
}
|
// 其他错误时
|
else {
|
Message({
|
message: response.data.msg,
|
type: "warning",
|
});
|
return response.data;
|
}
|
},
|
(error) => {
|
console.log("error", error);
|
// return Promise.reject(error);
|
return error;
|
}
|
);
|
|
export default axios; // 这句千万不能漏下!!!
|
|
/**
|
* post 方法封装
|
* @param url
|
* @param data
|
* @returns {Promise}
|
*/
|
export function post(url, data = {}) {
|
return new Promise((resolve, reject) => {
|
axios.post(url, qs.stringify(data)).then(
|
(response) => {
|
resolve(response);
|
},
|
(err) => {
|
console.log("post err", err);
|
reject(err);
|
}
|
);
|
});
|
}
|
|
/**
|
* get 方法封装
|
* @param url
|
* @param data
|
* @returns {Promise}
|
*/
|
export function get(url, data = {}) {
|
return new Promise((resolve, reject) => {
|
axios.get(url, { params: data }).then(
|
(response) => {
|
resolve(response);
|
},
|
(err) => {
|
console.log("get err", err);
|
// reject(err);
|
}
|
);
|
});
|
}
|
|
/**
|
* 其他delete等的封装类似
|
* 可以查看中文文档 自行封装
|
*/
|