forked from stavyan/TinyShop-UniApp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
executable file
·138 lines (133 loc) · 3.8 KB
/
index.js
File metadata and controls
executable file
·138 lines (133 loc) · 3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/* eslint-disable */
import Request from './request';
import { refreshToken } from '@/api/login';
import indexConfig from '@/config/index.config';
import mHelper from '@/utils/helper';
import store from '@/store';
const http = new Request();
// request全局参数设置
http.setConfig(config => {
/* 设置全局配置 */
config.baseUrl = indexConfig.baseUrl; /* 根域名不同 */
const systemInfo = uni.getSystemInfoSync();
const systemInfoHeaders = {
'device-name': systemInfo.brand, // 设备名称
width: systemInfo.screenWidth, // 屏幕宽度
height: systemInfo.screenHeight, // 屏幕高度
os: systemInfo.platform, // 客户端平台
'os-version': systemInfo.system // 操作系统版本
};
config.header = {
...config.header,
...systemInfoHeaders
};
return config;
});
let isRefreshing = false;
let requests = [];
http.interceptor.request(
config => {
/* 请求之前拦截器 */
config.header['x-api-key'] = uni.getStorageSync('accessToken');
// 单商户
// config.header['merchant-id'] = uni.getStorageSync('merchantId') || 1;
return config;
},
error => {
return Promise.reject(error);
}
);
// 刷新refreshToken
async function handleRefreshToken(refresh_token) {
const params = {};
params.group = mHelper.platformGroupFilter();
params.refresh_token = refresh_token;
await http.post(refreshToken, params).then(async r => {
store.commit('login', r.data);
isRefreshing = false;
});
}
http.interceptor.response(
async response => {
/* 请求之后拦截器 */
switch (response.data.code) {
case 200:
return response.data;
case 400:
mHelper.toast('错误的请求');
return Promise.reject(response.data.message);
break;
case 401:
isRefreshing = false;
// refreshToken 的返回状态为401
if (response.config.url === refreshToken) {
uni.removeStorageSync('accessToken');
await store.commit('logout');
uni.showModal({
content: '会话已过期,是否跳转登录页面?',
success: confirmRes => {
if (confirmRes.confirm) {
mHelper.backToLogin();
throw response.data.message;
}
}
});
break;
} else {
// 如果refreshToken为空 则直接跳转登录
if (!store.state.refreshToken) {
uni.removeStorageSync('accessToken');
await store.commit('logout');
uni.showModal({
content: '会话已过期,是否跳转登录页面?',
success: confirmRes => {
if (confirmRes.confirm) {
mHelper.backToLogin();
throw response.data.message;
}
}
});
throw response.data.message;
} else {
// isRefreshing同一个页面只执行一次
if (!isRefreshing) {
isRefreshing = true;
// 刷新token
await handleRefreshToken(store.state.refreshToken, response);
requests.forEach(cb => cb());
requests = [];
isRefreshing = false;
return http.request(response.config);
} else {
return new Promise(resolve => {
// 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
requests.push(() => {
resolve(http.request(response.config));
});
});
}
}
}
break;
case 405:
mHelper.toast('当前操作不被允许');
return Promise.reject(response.data.message);
case 404:
mHelper.toast(response.data.message);
return Promise.reject(response.data.message);
case 429:
mHelper.toast('请求过多,先休息一下吧');
return Promise.reject(response.data.message);
case 500:
mHelper.toast('服务器打瞌睡了');
return Promise.reject(response.data.message);
default:
mHelper.toast(response.data.message);
return Promise.reject(response.data.message);
}
},
error => {
return Promise.reject(error);
}
);
export { http };