You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

125 lines
2.2 KiB

import functions from "@/utils/functions.js";
import {
getToken,
getRefreshToken,
setToken
} from "@/utils/auth.js";
// params拿到开发环境还是线上环境
const service = (params) => {
return new Promise((relove, reject) => {
let result = doRequest(params);
result.then(res => {
if (res != null) {
relove(res);
} else {
reject(res);
}
})
});
}
//请求接口 里面嵌套刷新token
async function doRequest(params) {
// 加载中的一个动画
functions.showWaiting();
// 设置请求头
let header = {
"Content-Type": "application/json",
"token": getToken()
}
// 如果传递了请求头就用 传递的请求头
if (params.header) {
header = {
...header,
...params.header
};
}
// 等待结果 将成功与失败的结果解构
const [err, success] = await uni.request({
url: params.url,
data: params.data,
method: params.method,
// 传递模式 以json的方式传递
dataType: "json",
header: header
});
// 结果回来之后 关闭请求的动画
functions.closeWaiting();
if (!err) {
if (success.statusCode == 200) {
let data = success.data;
if (data.code == 200) {
return data.data ? data.data : {};
} else if (data.code == 203) {
// 如果状态码为203 代表状态码过期 从新发送请求获取token
return refreshTokenRequest(params);
} else if (data.code == 205) {
functions.logout();
return false;
} else {
functions.error(data.msg);
return null;
}
} else {
//请求失败
functions.error("服务器请求失败");
return null;
}
} else {
//请求失败
functions.error("服务器请求失败");
return null;
}
}
//刷新token 需要问问
async function refreshTokenRequest(params) {
// 如果请求不为空
if (!getRefreshToken()) {
functions.logout();
return false;
}
let apiUrl = `${functions.getDomain()}/api/cy-check-sure`;
const result = doRequest({
url: apiUrl,
method: "post",
data: {},
header: {
"Refresh-Token": getRefreshToken()
}
});
const newToken = await result;
if (!newToken || !newToken.token) {
functions.logout();
return false;
}
setToken(newToken.token);
return doRequest(params);
}
export default service;