123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- import Vue from "vue";
- import App from "./App.vue";
- import router from "./router";
- import ElementUI from "element-ui";
- import "element-ui/lib/theme-chalk/index.css";
- import "./assets/css/common.css";
- import axios from "axios";
- const axiosRetry = require("axios-retry");
- Vue.config.productionTip = false;
- // Vue.use(VueResource);
- Vue.use(ElementUI);
- const qmInstance = axios.create({});
- let wk_token;
- // 正在处理的请求数
- window.requestInProcessingTotal = 0;
- // 并发的总错误数
- window.faceppConcurrencyErrorNum = 0;
- // 每分钟并发错误的数量
- window.faceppConcurrencyErrorNumPerMinute = 0;
- let faceppConCurrencyErrorArray = [];
- qmInstance.interceptors.request.use(
- config => {
- if (config.url.includes("/login") === false) {
- if (!wk_token) {
- wk_token = window.localStorage.getItem("token");
- }
- if (wk_token && config.headers.common["token"] == null) {
- config.headers.common["key"] = window.localStorage.getItem("key");
- config.headers.common["token"] = wk_token;
- }
- } else {
- wk_token = null;
- }
- window.requestInProcessingTotal++;
- return config;
- },
- error => {
- console.log(error);
- return Promise.resolve(error);
- }
- );
- // 计算每分钟的并发错误数
- function calcErrorPerMinute(now) {
- const valid = faceppConCurrencyErrorArray.filter(
- t => now - t < 3 * 60 * 1000
- );
- window.faceppConcurrencyErrorNumPerMinute = (
- (60 * 1000 * valid.length) /
- (now - valid[0])
- ).toFixed(2);
- if (valid.length <= 1) {
- window.faceppConcurrencyErrorNumPerMinute = 0;
- }
- }
- //响应拦截
- qmInstance.interceptors.response.use(
- response => {
- window.requestInProcessingTotal--;
- // 相当于timer的作用
- const now = Date.now();
- calcErrorPerMinute(now);
- return response;
- },
- error => {
- window.requestInProcessingTotal--;
- // 这里是返回状态码不为200时候的错误处理
- const status = error.response.status;
- if (status != 200) {
- console.log(error);
- if (error.response.data.error_message) {
- console.log(error.response.data.error_message);
- if (error.response.data.error_message.toLowerCase().includes("limit")) {
- // 这是facepp并发错误的response特征
- const now = Date.now();
- faceppConCurrencyErrorArray.push(now);
- if (faceppConCurrencyErrorArray.length > 200) {
- faceppConCurrencyErrorArray.shift();
- }
- calcErrorPerMinute(now);
- window.faceppConcurrencyErrorNum++;
- }
- }
- }
- // 判断reponse的内容,如果是no login就退出
- if (
- error.response.data.code === "403"
- // &&
- // error.response.data.desc === "no login." // 线上可能是 token is wrong
- ) {
- wk_token = null;
- localStorage.removeItem("rootOrgId");
- localStorage.removeItem("userName");
- window.localStorage.removeItem("token");
- window.localStorage.removeItem("key");
- if (Date.now() - (window.logAlertDate || 0) > 10000) {
- window.logAlertDate = Date.now();
- alert("登录失效 跳转登录页面");
- }
- // router.push({
- // name: "login"
- // });
- location.replace("/");
- }
- // 登录失效 跳转登录页面 //facepp可能返回403
- // if (status == 403 || status == 401) {
- // wk_token = null;
- // localStorage.removeItem("rootOrgId");
- // localStorage.removeItem("userName");
- // localStorage.removeItem("user_token");
- // if (Date.now() - (window.logAlertDate || 0) > 10000) {
- // window.logAlertDate = Date.now();
- // alert("登录失效 跳转登录页面");
- // }
- // router.push({
- // name: "login"
- // });
- // }
- return Promise.reject(error);
- }
- );
- qmInstance.defaults.withCredentials = true; //允许跨域携带cookie
- qmInstance.defaults.timeout = 10000; //超时时间
- qmInstance.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; //标识这是一个 ajax 请求
- axiosRetry(qmInstance, {
- retries: 5, // 重试5次
- retryCondition: err => {
- // 根据err的特征来执行请求,目前是全部请求
- console.log(
- `below error status code: ${err.response.status} and retry ...`
- );
- console.log(err);
- console.log();
- return true;
- }
- });
- Vue.prototype.$http = qmInstance;
- new Vue({
- router,
- render: h => h(App)
- }).$mount("#app");
|