封装
import axios from "axios";
const errorCode:Record<string,string> = {
'401': '认证失败,无法访问系统资源',
'403': '当前操作没有权限',
'404': '访问资源不存在',
'default': '系统未知错误'
}
const instance = axios.create({
baseURL: import.meta.env.VITE_BASE_API,
timeout: 10000,
});
const goMain = new BroadcastChannel("goMain");
instance.interceptors.request.use(
function (config: any) {
config.headers["userType"] = "user";
const isToken: boolean = (config.headers || {}).isToken != false;
const token = localStorage.getItem("token");
if (token && isToken) {
config.headers["Authorization"] = "Bearer " + token;
}
if (config.method === "get" && config.params) {
let url = config.url + "?" + tansParams(config.params);
url = url.slice(0, -1);
config.params = {};
config.url = url;
}
return config;
},
function (error: any) {
return Promise.reject(error);
}
);
instance.interceptors.response.use(
(res: any) => {
const code: number = res.data.code || 200;
let msg: string = errorCode[code] || res.data.msg || errorCode["default"];
if (
res.request.responseType === "blob" ||
res.request.responseType === "arraybuffer"
) {
return res.data;
}
if (code === 401) {
let msgData = {
type: "FedLogOut",
};
goMain.postMessage(JSON.stringify(msgData));
return Promise.reject(new Error("登录超时"));
} else if (code === 500) {
if (msg.length > 100) {
msg = "服务端异常";
}
console.log('err',msg)
return Promise.reject(new Error(`服务端异常:${code}==>${msg}`));
} else if (code !== 200) {
return Promise.reject(new Error(`${code}==>${msg}`));
} else {
return res.data;
}
},
(error: any) => {
let { message } = error;
if (message == "Network Error") {
message = "后端接口连接异常";
} else if (message.includes("timeout")) {
message = "系统接口请求超时";
} else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
return Promise.reject(error);
}
);
export default instance;
function tansParams(params: any) {
let result = ''
for (const propName of Object.keys(params)) {
const value = params[propName];
var part = encodeURIComponent(propName) + "=";
if (value !== null && value !== "" && typeof (value) !== "undefined") {
if (typeof value === 'object') {
for (const key of Object.keys(value)) {
if (value[key] !== null && value !== "" && typeof (value[key]) !== 'undefined') {
let params = propName + '[' + key + ']';
var subPart = encodeURIComponent(params) + "=";
result += subPart + encodeURIComponent(value[key]) + "&";
}
}
} else {
result += part + encodeURIComponent(value) + "&";
}
}
}
return result
}
使用
import request from '@/api/_axios_'
export function GetQuery(params: object) {
return request({
url: '',
method: 'get',
params: params
})
}
export function GetId(id: string | number) {
return request({
url: `/${id}`,
method: 'get',
})
}
export function Post(data: object) {
return request({
url: '',
method: 'post',
data: data
})
}
export function Update(data: object) {
return request({
url: '',
method: 'put',
data: data
})
}
export function Delete(id: string | number) {
return request({
url: `/${id}`,
method: 'delete'
})
}
export function GetNT() {
return request({
url: '',
method: 'get',
headers: {
isToken: false
},
})
}