cacheApi.js
import api from '@/api/index';
let promiseList = [];
setInterval(() => {
promiseList = [];
}, 60000);
function checkPromise(url, param) {
let key = url + JSON.stringify(param);
let res = promiseList.filter(item => item.key === key);
if (res.length > 0) {
return res[0].value;
} else {
return false;
}
}
export default function zGet(url, param, merge = true) {
let cachePromise = checkPromise(url, param);
if (merge && cachePromise) {
return cachePromise;
}
let promise = api.get(url, { params: param });
promiseList.push({
key: url + JSON.stringify(param),
value: promise,
});
return promise;
}
请求拦截器
import axios from 'axios';
import qs from 'qs';
import { message } from 'antd';
import URI from 'urijs';
import setting from '@/setting';
import { jsonp } from "@/utils/util";
const api = axios.create({
baseURL: setting.baseURL,
timeout: setting.timeout,
headers: {
'x-requested-with': 'XMLHttpRequest'
}
})
api.interceptors.request.use(conf => {
if (conf.method === 'post') {
if (!conf.headers['Content-Type']) {
conf.headers['Content-Type'] = 'application/x-www-form-urlencoded';
conf.data = qs.stringify(conf.data, { arrayFormat: 'repeat' });
}
}
return conf
}, err => {
return Promise.reject(err)
});
function sendResponse(res = {}) {
const {
config = {},
data = {},
method,
} = res;
let { code, msg, token } = data;
let destination = '';
if (`${code}` === '110000') {
const uri = new URI('http://login.doba.com/');
}
const redirect = destination ? {
destination,
} : -1;
return {
...data,
redirect,
};
}
api.interceptors.response.use((res, req) => {
if (!res.data) return null;
} else {
return sendResponse(res);
}
}, err => {
if (axios.isCancel(err)) {
console.log('request cancel', err)
}
return Promise.resolve({});
})
const serverRequest = (req, fetchFun) => {
if(!req){
req = {};
}
const config = {};
if (!!req?.headers) {
const _headers = req?.headers || {};
config.baseURL = setting.baseInnerUrl;
delete _headers['accept'];
config.headers = {
..._headers,
referer: _headers?.referer || `http://www.doba.com${req?.url}`,
}
if (PROCESS_ENV !== 'development') {
config.headers.host = 'www.innerdoba.com';
}
}
return async (params = {}) => {
config.params = params;
return fetchFun(config);
};
};
export { api as default, serverRequest }