Jacob
9 天以前 fbc764bdbca94ced960b53e7e46fa064583752f1
utils/request.js
....@@ -10,6 +10,49 @@
1010 } from '../libs/login';
1111 import store from '../store';
1212
13
+// ========== 接口请求日志开关与工具 ==========
14
+// 是否启用接口详细日志(true 开启,false 关闭;上线前可置为 false)
15
+const ENABLE_REQUEST_LOG = true;
16
+
17
+/**
18
+ * 统一打印接口请求日志(请求结束后调用)
19
+ * 包含:请求地址、请求方法、请求参数、响应状态、响应报文、耗时
20
+ */
21
+function printRequestLog({
22
+ url,
23
+ method,
24
+ data,
25
+ status,
26
+ response,
27
+ isError,
28
+ startTime,
29
+ errMsg
30
+}) {
31
+ if (!ENABLE_REQUEST_LOG) return;
32
+
33
+ const baseUrl = HTTP_REQUEST_URL || 'http://api.front.hdq.xbdzz.cn';
34
+ const fullUrl = baseUrl + '/api/front/' + url;
35
+ const costTime = startTime ? (Date.now() - startTime) + 'ms' : 'N/A';
36
+ const tag = isError ? '✘ 接口请求失败' : '✔ 接口请求完成';
37
+ const time = new Date().toLocaleString();
38
+
39
+ console.log('\n┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓');
40
+ console.log('┃ ' + tag + ' [' + time + ']');
41
+ console.log('┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫');
42
+ console.log('┃ 请求地址: ' + fullUrl);
43
+ console.log('┃ 请求方法: ' + ((method || 'GET').toUpperCase()));
44
+ console.log('┃ 请求参数:');
45
+ console.log(data || {});
46
+ console.log('┃ 响应状态: ' + (status !== undefined ? status : (isError ? '请求失败' : 'N/A')));
47
+ console.log('┃ 响应报文:');
48
+ console.log(response);
49
+ if (isError && errMsg) {
50
+ console.log('┃ 错误信息: ' + errMsg);
51
+ }
52
+ console.log('┃ 请求耗时: ' + costTime);
53
+ console.log('┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n');
54
+}
55
+
1356 function filterData(data) {
1457 if (!data) return {}
1558 if (Array.isArray(data)) return data
....@@ -35,7 +78,6 @@
3578 if (params != undefined) {
3679 header = HEADERPARAMS;
3780 }
38
- console.log(123123123123123123, url)
3981 if (!noAuth) {
4082 //登录过期自动登录
4183 if (!store.state.app.token && !checkLogin()) {
....@@ -55,23 +97,45 @@
5597 return new Promise((resolve, reject) => {
5698 Url = HTTP_REQUEST_URL || 'http://api.front.hdq.xbdzz.cn';
5799 let app = getApp();
100
+ const startTime = Date.now();
101
+ const reqData = filterData(data);
58102 uni.request({
59103 url: Url + '/api/front/' + url,
60104 method: method || 'GET',
61105 header: header,
62
- data: filterData(data),
106
+ data: reqData,
63107 success: (res) => {
64108 // if(url.indexOf('pre/order')>=0){
65109 // res.data.code=601;
66110 // }
111
+ // 成功 / 非致命分支:统一打印一份日志(gio/log 与 noVerify 走白名单,不打日志)
67112 if (url.indexOf('gio/log') >= 0) {
68113 resolve(res.data, res);
69114 } else if (noVerify) {
70115 resolve(res.data, res);
71116 } else if (res.data.code == 200) {
117
+ printRequestLog({
118
+ url,
119
+ method,
120
+ data: reqData,
121
+ status: res.statusCode,
122
+ response: res.data,
123
+ isError: false,
124
+ startTime
125
+ });
72126 resolve(res.data, res);
73127 } else if ([410000, 410001, 410002, 401].indexOf(res.data.code) !== -1) {
74128 //接口返回需要登录
129
+ printRequestLog({
130
+ url,
131
+ method,
132
+ data: reqData,
133
+ status: res.statusCode,
134
+ response: res.data,
135
+ isError: true,
136
+ startTime,
137
+ errMsg: '需要登录 code=' + res.data.code
138
+ });
75139 console.log('需要登录 url ' + url, res.data)
76140 uni.$emit('needLogin');
77141 uni.showToast({
....@@ -79,6 +143,16 @@
79143 });
80144 reject(res.data);
81145 } else {
146
+ printRequestLog({
147
+ url,
148
+ method,
149
+ data: reqData,
150
+ status: res.statusCode,
151
+ response: res.data,
152
+ isError: true,
153
+ startTime,
154
+ errMsg: res.data.message || '系统错误'
155
+ });
82156 if (app) {
83157 uni.$emit("showTips", {
84158 'title': res.data.message || '系统错误',
....@@ -95,6 +169,16 @@
95169 }
96170 },
97171 fail: (msg) => {
172
+ printRequestLog({
173
+ url,
174
+ method,
175
+ data: reqData,
176
+ status: undefined,
177
+ response: msg,
178
+ isError: true,
179
+ startTime,
180
+ errMsg: '网络请求失败'
181
+ });
98182 console.log(url, msg);
99183 if (app) {
100184 uni.$emit("showTips", {