Skip to content

Instantly share code, notes, and snippets.

@tyrad
Last active December 25, 2019 09:12
Show Gist options
  • 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

具体参考这里

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