import store from '@/store'
import config from '@/config'
import {
getToken, removeToken
} from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { wechatCodeLogin } from "@/api/login.js"
import {
toast,
showConfirm,
tansParams,
showLoading,
hideLoading
} from '@/utils/common'
import storage from '@/utils/storage'
import constant from '@/utils/constant'
let timeout = 10000
const baseUrl = config.baseUrl
let isRefreshing = false
let requests = []
const request = config => {
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false
config.header = config.header || {}
if (getToken() && !isToken) {
config.header['Authorization'] = getToken();
let params = config.data;
params.userId = storage.get(constant.userId);
params.loginName = storage.get(constant.loginName);
params.userName = storage.get(constant.userName);
params.orgId = storage.get(constant.orgId);
params.orgCode = storage.get(constant.orgCode);
params.orgName = storage.get(constant.orgName);
}
// get请求映射params参数
if (config.params) {
let url = config.url + '?' + tansParams(config.params)
url = url.slice(0, -1)
config.url = url
}
return new Promise((resolve, reject) => {
if (config.showLoading) {
showLoading('加载中...');
};
uni.request({
method: config.method || 'get',
timeout: config.timeout || timeout,
url: config.baseUrl || baseUrl + config.url,
data: config.data,
header: config.header,
dataType: 'json',
success(res) {
if (res.statusCode == 200) {
console.log(res.data)
if (res.data.code != 0) {
if(res.data.code == 60001){
if (!isRefreshing) {
isRefreshing = true;
uni.login({
"provider": "weixin",
"onlyAuthorize": true,
success: function(event) {
wechatCodeLogin(event.code).then(result => {
storage.setUserInfo(result.data);
requests.forEach(cb => cb())
requests = []
request(config);
}).catch((error)=>{
storage.set(constant.openId, error.openId);
uni.reLaunch({ url: '/pages/login' })
}).finally(() => {
isRefreshing = false
});
},
fail: function(err) {
uni.reLaunch({ url: '/pages/login' })
console.log("微信认证失败:" + err.code)
isRefreshing = false
},
});
}else{
//多个接口刷新token时只能一个能刷新,其他都需要等待
return new Promise((resolve)=>{
requests.push(()=>{
resolve(request(config))
});
});
}
}else{
var content = res.data.msg ? res.data.msg : '系统异常' + '';
showConfirm(content).then(res => {
})
}
reject(res.data);
}
resolve(res.data);
} else if (res.statusCode == 404) {
showConfirm('接口请求出错,请检查手机网络');
reject();
} else {
console.log(res);
showConfirm(res.errMsg + ':' + res.data.message + ':' + res.data.msg);
reject();
}
},
fail(error) {
console.log("error=" + error);
showConfirm('接口请求出错:' + error.errMsg);
reject(error)
},
complete(res) {
hideLoading()
}
})
})
}
export default request
token失效后,我重新刷新,也请求了之前的接口,但是接收不到返回值了
大佬。我修改了reques.js 我想在前端做无感刷新toke,就是现在问题是,这个已经实现无感刷新token了,但是有个问题,就是刷新完token后之前的接口函数就会接收不到返回信息