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;