Skip to content

Instantly share code, notes, and snippets.

@tyrad
Last active December 25, 2019 09:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tyrad/470d7a3bc4cbdf434c286f9739eaf268 to your computer and use it in GitHub Desktop.
Save tyrad/470d7a3bc4cbdf434c286f9739eaf268 to your computer and use it in GitHub Desktop.
axios请求
import axios from "axios";
import { Message, MessageBox } from "element-ui";
import { getToken } from "@/utils/TokenHelper";
import store from "@/store";
const Code = {
/** 成功 */
SUCC: 1,
/** 失败 */
FAIL: -1,
/** 未登录 */
UNAUTHEN: 4401,
/** 未授权,拒绝访问 */
UNAUTHZ: 4403,
/** session超时退出了登录 */
SESSION_TIMOUT: 4433,
/** 服务端异常 */
SERVER_ERR: 5500
};
export default function $axios(options) {
return new Promise((resolve, reject) => {
const instance = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
timeout: 1000 * 15,
withCredentials: false
});
instance.interceptors.request.use(
config => {
if (store.getters.token) {
config.headers["th-token"] = store.getters.token;
}
return config;
},
error => {
return Promise.reject(error);
}
);
//https://github.com/ssttm169/use-axios-well
//@0.19.0有个bug https://github.com/axios/axios/issues/2203
//先使用 0.18.1
instance.interceptors.response.use(
res => {
if (res.data.succ) {
//如果后台返回的json显示成功,pass
return res;
} else {
if (res.data.code === Code.UNAUTHEN || res.data.code === Code.SESSION_TIMOUT) {
//处理登录相关的错误
MessageBox.confirm("你已被登出,可以取消继续留在该页面,或者重新登录", "确定登出", {
confirmButtonText: "重新登录",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
store.dispatch("LogOut").then(() => {
location.reload();
});
});
} else {
//其它错误弹出错误信息
Message({ message: res.data.msg, type: "error", duration: 5000 });
}
return Promise.reject(res);
}
},
err => {
//判断请求超时的判断
if (err.code === "ECONNABORTED" && err.message.indexOf("timeout") !== -1) {
let config = err.config;
if (!config || !config.retry) {
return Promise.reject(err);
}
config.__retryCount = config.__retryCount || 0;
if (config.__retryCount >= config.retry) {
Message({ message: "请求超时", type: "error", duration: 5000 });
return Promise.reject(err);
}
// Increase the retry count
config.__retryCount += 1;
let backoff = new Promise(function(resolve) {
setTimeout(function() {
resolve();
}, config.retryDelay || 1);
});
// Return the promise in which recalls axios to retry the request
return backoff.then(function() {
return instance(config);
});
}
Message({ message: err.message, type: "error", duration: 5000 });
return Promise.reject(err);
}
);
//请求处理
instance(options)
.then(res => {
resolve(res);
})
.catch(error => {
reject(error);
});
});
}
let promise = eval('get("${BusiBaseApi}/axios/getMapping?name=背景框", 5, 3, 2000)');
promise
.then(data => {
this.xData = data;
})
.catch(error => {
console.log(error);
});
import request from "./api";
import replace from "./replace";
import datavManagerAPI from "../../BackendAPI/datavManager/datavManager";
/**
* 请求参数
* @param url 地址url
* @param timeout 超时时间,单位秒
* @param retry 重复请求次数
* @param retryDelay 重复请求的时间间隔,单位秒
* @returns ax
*/
export default function $get(url, timeout, retry, retryDelay) {
let config = {
url: replace.replaceUrl(url),
timeout: (timeout || 30) * 1000,
retry: retry || 0,
retryDelay: retryDelay
};
return new Promise((resolve, reject) => {
request(config)
.then(response => {
resolve(response.data);
})
.catch(error => {
reject(error);
});
});
}
export default {
apiReplaceSource: {
BusiBaseApi: "http://10.10.38.44:9007/api/v1"
},
replaceUrl: function(str) {
let newStr = str;
for (let key in this.apiReplaceSource) {
if (newStr.indexOf(key) > -1) {
let value = this.apiReplaceSource[key];
newStr = newStr.replace(new RegExp("\\${" + key + "}", "g"), value);
}
}
return newStr;
}
};
Copy link

ghost commented Dec 25, 2019

最新版axios已经移除了自定义属性,所有自定义属性都会被干掉

Copy link

ghost commented Dec 25, 2019

具体参考这里

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment