autobots-commonlib 1.2.8 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.idea/workspace.xml +364 -242
- package/README.md +16 -0
- package/http-demo.js +236 -0
- package/index.js +3 -1
- package/lib/QCRNetworkModule.js +419 -0
- package/lib/jump.js +75 -75
- package/package.json +3 -2
- package/util/utils.js +50 -0
- package/.npmignore +0 -13
package/README.md
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
autobots commonlib
|
|
2
|
+
|
|
3
|
+
"1.3.3"
|
|
4
|
+
支持android下fetch接口json数组数据并兼容旧版本
|
|
5
|
+
|
|
6
|
+
"1.3.2"
|
|
7
|
+
兼容js的fetch缓存方法修改异常情况
|
|
8
|
+
|
|
9
|
+
"1.3.1"
|
|
10
|
+
修改主软件网络库的js桥接代码,兼容js的fetch缓存方法
|
|
11
|
+
|
|
12
|
+
"1.3.0"
|
|
13
|
+
修改主软件网络库的js桥接代码,增加fetch支持缓存接口数据
|
|
14
|
+
|
|
15
|
+
"1.2.9"
|
|
16
|
+
增加主软件网络库的js桥接代码,对外提供js端的网络访问方法和demo程序
|
|
17
|
+
|
|
2
18
|
"1.2.8"
|
|
3
19
|
优化小程序右滑返回操作,增加普通RN应用右滑返回支持
|
|
4
20
|
|
package/http-demo.js
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { Toast, Native, QCRNetworkModule } from 'autobots-commonlib';
|
|
2
|
+
const NetworkModule = QCRNetworkModule
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* fetch方式-消息体为form类型
|
|
6
|
+
* @param url
|
|
7
|
+
* @param params
|
|
8
|
+
* @param config
|
|
9
|
+
* @returns {Promise<unknown | [any,null]>}
|
|
10
|
+
*/
|
|
11
|
+
const fetchForm = (url, params = {}, config = {}) => {
|
|
12
|
+
const options = {
|
|
13
|
+
method: 'post',
|
|
14
|
+
headers: {
|
|
15
|
+
'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
|
|
16
|
+
},
|
|
17
|
+
timeout: 15000,
|
|
18
|
+
...config
|
|
19
|
+
};
|
|
20
|
+
return NetworkModule.fetch(Native.getPostUrl(url), options, params).then((result) => {
|
|
21
|
+
//console.log("***--fetch--*** request----res="+result);
|
|
22
|
+
const res = typeof (result) == "string" ? JSON.parse(result) : result;
|
|
23
|
+
if (String(res.status) === '1' || String(res.code) === '0') {
|
|
24
|
+
// 网络请求成功和业务数据成功
|
|
25
|
+
return ([null, res]);
|
|
26
|
+
} else {
|
|
27
|
+
// Toast.Show(res.data.info);
|
|
28
|
+
return ([new Error('status不为1'), res]);
|
|
29
|
+
}
|
|
30
|
+
}).catch(error => {
|
|
31
|
+
return [error, null];
|
|
32
|
+
})
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* fetch方式-消息体为json类型
|
|
37
|
+
* @param url
|
|
38
|
+
* @param params
|
|
39
|
+
* @param config
|
|
40
|
+
* @returns {Promise<unknown | [any,null]>}
|
|
41
|
+
*/
|
|
42
|
+
const fetchJson = (url, params = {}, config = {}) => {
|
|
43
|
+
const options = {
|
|
44
|
+
method: 'post',
|
|
45
|
+
headers: {
|
|
46
|
+
Accept: 'application/json',
|
|
47
|
+
'Content-Type': 'application/json'
|
|
48
|
+
},
|
|
49
|
+
timeout: 15000,
|
|
50
|
+
...config
|
|
51
|
+
};
|
|
52
|
+
return NetworkModule.fetch(Native.getPostUrl(url), options, params).then((result) => {
|
|
53
|
+
const res = typeof (result) == "string" ? JSON.parse(result) : result;
|
|
54
|
+
if (res.status === 1) {
|
|
55
|
+
// 网络请求成功和业务数据成功
|
|
56
|
+
return [null, res.returnObject];
|
|
57
|
+
} else {
|
|
58
|
+
return [new Error('status不为1'), res.info];
|
|
59
|
+
}
|
|
60
|
+
}).catch(error => {
|
|
61
|
+
console.log(url)
|
|
62
|
+
console.log(error);
|
|
63
|
+
Toast.Show('网络请求失败');
|
|
64
|
+
return [error, null];
|
|
65
|
+
})
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* post方式-消息体为form类型
|
|
70
|
+
* @param url
|
|
71
|
+
* @param params
|
|
72
|
+
* @param header
|
|
73
|
+
* @returns {Promise<any>}
|
|
74
|
+
*/
|
|
75
|
+
const postUseForm = (url, params = {}, header = {}) => {
|
|
76
|
+
const eventId = url.split('?')[0];
|
|
77
|
+
let queryParam = sliptParams(url);
|
|
78
|
+
let param = Object.assign(params, queryParam);
|
|
79
|
+
let json = JSON.stringify(param);
|
|
80
|
+
return NetworkModule.postForm(Native.getPostUrl(url), header, params).then((result) => {
|
|
81
|
+
const res = typeof (result) == "string" ? JSON.parse(result) : result;
|
|
82
|
+
if (String(res.status) === '1' || String(res.code) === '0') {
|
|
83
|
+
// 网络请求成功和业务数据成功
|
|
84
|
+
return ([null, res]);
|
|
85
|
+
} else {
|
|
86
|
+
// Toast.Show(res.data.info);
|
|
87
|
+
return ([new Error('status不为1'), res]);
|
|
88
|
+
}
|
|
89
|
+
}).catch(error => {
|
|
90
|
+
return [error, null];
|
|
91
|
+
})
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* post方式-消息体为json类型
|
|
96
|
+
* @param url
|
|
97
|
+
* @param params
|
|
98
|
+
* @param header
|
|
99
|
+
* @returns {Promise<any>}
|
|
100
|
+
*/
|
|
101
|
+
const postUseJson = (url, params = {}, header = {}) => {
|
|
102
|
+
//console.log("***--fetch--*** postUseJson----url="+Native.getPostUrl(url));
|
|
103
|
+
//console.log("***--fetch--*** postUseJson----params="+JSON.stringify(params));
|
|
104
|
+
return NetworkModule.postJson(Native.getPostUrl(url), header, params).then((result) => {
|
|
105
|
+
//console.log("***--fetch--*** postUseJson----result="+result);
|
|
106
|
+
const res = typeof (result) == "string" ? JSON.parse(result) : result;
|
|
107
|
+
if (res.status === 1) {
|
|
108
|
+
// 网络请求成功和业务数据成功
|
|
109
|
+
return [null, res.returnObject];
|
|
110
|
+
} else {
|
|
111
|
+
//Toast.Show(res.data.info);
|
|
112
|
+
return [new Error('status不为1'), res.info];
|
|
113
|
+
}
|
|
114
|
+
}).catch(error => {
|
|
115
|
+
console.log(url);
|
|
116
|
+
console.log(error);
|
|
117
|
+
Toast.Show('网络请求失败');
|
|
118
|
+
return [error, null];
|
|
119
|
+
})
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* get方式
|
|
124
|
+
* @param url
|
|
125
|
+
* @param body
|
|
126
|
+
* @param empId
|
|
127
|
+
* @returns {any}
|
|
128
|
+
*/
|
|
129
|
+
const httpGet = function (url, body, empId) {
|
|
130
|
+
//增加汽车人网页传递参数
|
|
131
|
+
url = addUrlParams(url);
|
|
132
|
+
if (body != {}) {
|
|
133
|
+
var queryString = toQueryString(body);
|
|
134
|
+
var urlStr = url + (url.indexOf("?") < 0 ? "?" : "&") + queryString;
|
|
135
|
+
return NetworkModule.get(urlStr, { "auto-eid": empId, "Accept": "application/json;charset=UTF-8" }, {}).then(result => {
|
|
136
|
+
const res = typeof (result) == "string" ? JSON.parse(result) : result;
|
|
137
|
+
return res
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
const addUrlParams = function (url) {
|
|
142
|
+
var c = Config.get();
|
|
143
|
+
return c && c.urlParams
|
|
144
|
+
? url + (url.indexOf("?") < 0 ? "?" : "&") + c.urlParams
|
|
145
|
+
: url;
|
|
146
|
+
};
|
|
147
|
+
const toQueryString = function (obj) {
|
|
148
|
+
var ret = [];
|
|
149
|
+
for (var key in obj) {
|
|
150
|
+
key = encodeURIComponent(key);
|
|
151
|
+
var values = obj[key];
|
|
152
|
+
if (values && values.constructor == Array) {
|
|
153
|
+
//数组
|
|
154
|
+
var queryValues = [];
|
|
155
|
+
for (var i = 0, len = values.length, value; i < len; i++) {
|
|
156
|
+
value = values[i];
|
|
157
|
+
queryValues.push(toQueryPair(key, value));
|
|
158
|
+
}
|
|
159
|
+
ret = ret.concat(queryValues);
|
|
160
|
+
} else {
|
|
161
|
+
//字符串
|
|
162
|
+
ret.push(toQueryPair(key, values));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return ret.join("&");
|
|
166
|
+
};
|
|
167
|
+
const toQueryPair = function (key, value) {
|
|
168
|
+
if (typeof value == "undefined") {
|
|
169
|
+
return key;
|
|
170
|
+
}
|
|
171
|
+
return key + "=" + encodeURIComponent(value === null ? "" : String(value));
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* 下载文件方式
|
|
176
|
+
* @param url
|
|
177
|
+
* @param fileName
|
|
178
|
+
* @returns {Promise<any>}
|
|
179
|
+
*/
|
|
180
|
+
const downloadFile = (url, fileName = '') => {
|
|
181
|
+
if (fileName.length == 0) {
|
|
182
|
+
let timestamp = (new Date()).getTime();//获取当前时间错
|
|
183
|
+
let random = String(((Math.random() * 1000000) | 0))//六位随机数
|
|
184
|
+
fileName = `${timestamp + random}.jpg`;
|
|
185
|
+
}
|
|
186
|
+
console.log('---downloadFile---url=' + url);
|
|
187
|
+
console.log('---downloadFile---fileName=' + fileName);
|
|
188
|
+
return NetworkModule.downFile(url, fileName).then(res => {
|
|
189
|
+
//res=storage/emulated/0/Android/data/com.autohome.helper/files/371be190c42a0125fd3f5c223835fcbf/1712193802418823497.jpg
|
|
190
|
+
return res
|
|
191
|
+
}).catch(error => {
|
|
192
|
+
return error
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* 上传文件方式
|
|
198
|
+
* @param url
|
|
199
|
+
* @param pictures 路径数组,支持多文件上传
|
|
200
|
+
* @param empId
|
|
201
|
+
* @returns {Promise<any>}
|
|
202
|
+
*/
|
|
203
|
+
const uploadImage = (url, pictures) => {
|
|
204
|
+
let formList = [];
|
|
205
|
+
pictures.map((val, idx) => {
|
|
206
|
+
const splits = val.split('.');
|
|
207
|
+
const suffix = splits[splits.length - 1];
|
|
208
|
+
const fileName = idx + '.' + suffix;
|
|
209
|
+
//fileKey,文件标识
|
|
210
|
+
let file = { uri: val, type: 'multipart/form-data', name: fileName, fileKey: 'fileData' };
|
|
211
|
+
formList.push(file);
|
|
212
|
+
});
|
|
213
|
+
return NetworkModule.postFile(Native.getPostUrl(url), {}, {}, formList).then(res => {
|
|
214
|
+
if (typeof (res) == 'string') {
|
|
215
|
+
res = JSON.parse(res)
|
|
216
|
+
}
|
|
217
|
+
if (res.status === 1) {
|
|
218
|
+
// 网络请求成功和业务数据成功
|
|
219
|
+
return [null, res.returnObject];
|
|
220
|
+
} else {
|
|
221
|
+
// Toast.Show(res.data.info);
|
|
222
|
+
let errorMessage = res.info ? res.info.replace(/\s+/g, "") : ''
|
|
223
|
+
if (errorMessage && errorMessage.length > 0) {
|
|
224
|
+
Toast.Show(errorMessage);
|
|
225
|
+
}
|
|
226
|
+
return [new Error('status不为1'), null];
|
|
227
|
+
}
|
|
228
|
+
}).catch(error => {
|
|
229
|
+
console.log('url === ' + url)
|
|
230
|
+
console.log(error);
|
|
231
|
+
Toast.Show('网络请求失败');
|
|
232
|
+
return [error, null];
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
module.exports = { fetchForm, fetchJson, postUseForm, postUseJson, httpGet, downloadFile, uploadFile };
|
package/index.js
CHANGED
|
@@ -12,6 +12,7 @@ import BackAndroid from './BackAndroid';
|
|
|
12
12
|
import ImageBackground from './ImageBackground';
|
|
13
13
|
import ViewPropTypes from './ViewPropTypes';
|
|
14
14
|
import NativeManager from './lib/NativeManager'
|
|
15
|
+
import NetworkModule from './lib/QCRNetworkModule'
|
|
15
16
|
|
|
16
17
|
module.exports = {
|
|
17
18
|
NativeManager,
|
|
@@ -26,5 +27,6 @@ module.exports = {
|
|
|
26
27
|
Others,
|
|
27
28
|
BackAndroid,
|
|
28
29
|
ImageBackground,
|
|
29
|
-
ViewPropTypes
|
|
30
|
+
ViewPropTypes,
|
|
31
|
+
NetworkModule
|
|
30
32
|
}
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { NativeModules, Platform } from 'react-native';
|
|
3
|
+
import Utils from "../util/utils";
|
|
4
|
+
|
|
5
|
+
var QCRRNNetworkModule = NativeModules.QCRRNNetworkModule;
|
|
6
|
+
|
|
7
|
+
var NetworkModule = {
|
|
8
|
+
fetch(url: String, config: Object, params: Object, cacheFunction: Function) {
|
|
9
|
+
return new Promise(function (resolve, reject) {
|
|
10
|
+
if (QCRRNNetworkModule && !Utils.isChooseOldNetApi(params)) {
|
|
11
|
+
asyncFetch(url, config, params, cacheFunction, resolve, reject);
|
|
12
|
+
} else {
|
|
13
|
+
asyncFromFetch(url, config, params, resolve, reject);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
get(url: String, headers: Object, params: Object) {
|
|
19
|
+
let requestUrl = url;
|
|
20
|
+
if (params && Object.keys(params).length > 0) {
|
|
21
|
+
if (requestUrl.indexOf('?') >= 0) {
|
|
22
|
+
requestUrl += '&'
|
|
23
|
+
} else {
|
|
24
|
+
requestUrl += '?'
|
|
25
|
+
}
|
|
26
|
+
for (let key in params) {
|
|
27
|
+
requestUrl += `${key}=${params[key]}`
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return new Promise(function (resolve, reject) {
|
|
31
|
+
if (QCRRNNetworkModule) {
|
|
32
|
+
asyncGet(requestUrl, headers, resolve, reject);
|
|
33
|
+
} else {
|
|
34
|
+
asyncGetFromFetch(requestUrl, headers, resolve, reject);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
postForm(url: String, header: Object, form: Object) {
|
|
40
|
+
return new Promise(function (resolve, reject) {
|
|
41
|
+
if (QCRRNNetworkModule) {
|
|
42
|
+
asyncPostForm(url, header, form, resolve, reject);
|
|
43
|
+
} else {
|
|
44
|
+
asyncPostFormFetch(url, header, form, resolve, reject);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
postJson(url: String, header: Object, json: Object) {
|
|
50
|
+
return new Promise(function (resolve, reject) {
|
|
51
|
+
if (QCRRNNetworkModule) {
|
|
52
|
+
asyncPostJson(url, header, json, resolve, reject);
|
|
53
|
+
} else {
|
|
54
|
+
asyncPostJsonFetch(url, header, json, resolve, reject);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
postFile(url: String, header: Object, param: Object, files: Array) {
|
|
60
|
+
return new Promise(function (resolve, reject) {
|
|
61
|
+
if (QCRRNNetworkModule) {
|
|
62
|
+
asyncPostFile(url, header, param, files, resolve, reject);
|
|
63
|
+
} else {
|
|
64
|
+
asyncPostFileFromFetch(url, header, param, files, resolve, reject);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
downFile(url: String, fileName: String) {
|
|
70
|
+
return new Promise(function (resolve, reject) {
|
|
71
|
+
if (QCRRNNetworkModule) {
|
|
72
|
+
asyncDownFile(url, fileName, resolve, reject);
|
|
73
|
+
} else {
|
|
74
|
+
asyncDownFileRN(url, fileName, resolve, reject);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
cancel(url: String) {
|
|
80
|
+
return new Promise(function (resolve, reject) {
|
|
81
|
+
asyncCancel(url, resolve, reject);
|
|
82
|
+
});
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
checkNetState(callback: Function) {
|
|
86
|
+
QCRRNNetworkModule && QCRRNNetworkModule.checkNetState(callback);
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
getNetType(callback: Function) {
|
|
90
|
+
QCRRNNetworkModule && QCRRNNetworkModule.getNetType(callback);
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
async function asyncFetch(url: String, config: Object, params: Object, cacheFunction: Function, resolveCallback: Function, rejectCallback: Function) {
|
|
96
|
+
let needReadCache = (config && config.method && config.method.indexOf('cache') >= 0) ? true : false;
|
|
97
|
+
if (needReadCache && cacheFunction) {
|
|
98
|
+
try {
|
|
99
|
+
let response = await QCRRNNetworkModule.getCacheData(url, params);
|
|
100
|
+
if (typeof response === 'string') {
|
|
101
|
+
if (response.trim() != '') {
|
|
102
|
+
response = JSON.parse(response);
|
|
103
|
+
cacheFunction(response);
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
cacheFunction(response);
|
|
107
|
+
}
|
|
108
|
+
} catch (error) {
|
|
109
|
+
console.log('缓存结果出错:', error)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
try {
|
|
114
|
+
var events;
|
|
115
|
+
if (Platform.OS === 'ios') {
|
|
116
|
+
events = await QCRRNNetworkModule.fetch(url, config, params);
|
|
117
|
+
} else {//android
|
|
118
|
+
try {
|
|
119
|
+
//处理body为json类型
|
|
120
|
+
let isJsonPost = false;
|
|
121
|
+
if (config && config.headers) {
|
|
122
|
+
if (config.headers['Content-Type'] && config.headers['Content-Type'].indexOf('application/json') >= 0) {
|
|
123
|
+
//if(params && Object.keys(params).length !== 0){
|
|
124
|
+
let jsonparam = {};
|
|
125
|
+
jsonparam.json = params ? JSON.stringify(params) : {};
|
|
126
|
+
config.body = jsonparam;
|
|
127
|
+
isJsonPost = true;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
config = config || {}
|
|
131
|
+
//处理body为form类型
|
|
132
|
+
if (!isJsonPost) {
|
|
133
|
+
config.headers = config.headers || {}
|
|
134
|
+
config.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'
|
|
135
|
+
// 将参数对象中的所有值转换为字符串类型,因为原生只按string类型来处理,否则有其它类型会报解析异常
|
|
136
|
+
const stringifiedParams = {};
|
|
137
|
+
if (params) {
|
|
138
|
+
Object.keys(params).forEach(key => {
|
|
139
|
+
if (typeof params[key] === 'undefined') {
|
|
140
|
+
stringifiedParams[key] = ""; // 将undefined值设为""
|
|
141
|
+
} else {
|
|
142
|
+
stringifiedParams[key] = String(params[key]);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
let formparam = {};
|
|
148
|
+
formparam.form = JSON.stringify(stringifiedParams);
|
|
149
|
+
config.body = formparam;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
console.log('asyncFetch 配置信息:', config);
|
|
153
|
+
events = await QCRRNNetworkModule.fetch(url, config);
|
|
154
|
+
if (typeof events === 'string') {
|
|
155
|
+
events = JSON.parse(events);
|
|
156
|
+
}
|
|
157
|
+
} catch (error) {
|
|
158
|
+
rejectCallback(error);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
resolveCallback(events);
|
|
162
|
+
} catch (error) {
|
|
163
|
+
console.log('结果:', error)
|
|
164
|
+
rejectCallback(error);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
async function asyncFromFetch(url: String, config: Object, params: Object, resolveCallback: Function, rejectCallback: Function) {
|
|
169
|
+
try {
|
|
170
|
+
let isJsonPost = false;
|
|
171
|
+
if (config && config.headers) {
|
|
172
|
+
if (config.headers['Content-Type'] && config.headers['Content-Type'].indexOf('application/json') >= 0) {
|
|
173
|
+
config.body = params ? JSON.stringify(params) : {};
|
|
174
|
+
isJsonPost = true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
config = config || {}
|
|
178
|
+
if (!isJsonPost) {
|
|
179
|
+
config.headers = config.headers || {}
|
|
180
|
+
config.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'
|
|
181
|
+
let requestBody = '';
|
|
182
|
+
for (let key in params) {
|
|
183
|
+
requestBody += `${key}=${params[key] || ''}&`
|
|
184
|
+
}
|
|
185
|
+
config.body = requestBody.length > 0 ? requestBody.slice(0, -1) : ""
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
let requestMethod = (config.method && config.method.length > 0) ? config.method : 'get';
|
|
189
|
+
if (config.method && config.method.length > 0 && config.method.indexOf('_cache') >= 0) {
|
|
190
|
+
requestMethod = config.method.replace('_cache', '');
|
|
191
|
+
}
|
|
192
|
+
config.method = requestMethod;
|
|
193
|
+
|
|
194
|
+
console.log('配置信息:', config);
|
|
195
|
+
const response = await fetch(url, config);
|
|
196
|
+
const json = await response.json();
|
|
197
|
+
resolveCallback(json);
|
|
198
|
+
} catch (error) {
|
|
199
|
+
rejectCallback(error);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
async function asyncGet(url: String, header: Object, resolveCallback: Function, rejectCallback: Function) {
|
|
204
|
+
try {
|
|
205
|
+
var events;
|
|
206
|
+
if (Platform.OS === 'ios') {
|
|
207
|
+
events = await QCRRNNetworkModule.get(url, header);
|
|
208
|
+
} else {
|
|
209
|
+
events = await QCRRNNetworkModule.get(url, header, null);
|
|
210
|
+
if (typeof events === 'string') {
|
|
211
|
+
events = JSON.parse(events);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
resolveCallback(events);
|
|
215
|
+
} catch (error) {
|
|
216
|
+
rejectCallback(error);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
async function asyncGetFromFetch(url: String, header: Object, resolveCallback: Function, rejectCallback: Function) {
|
|
221
|
+
try {
|
|
222
|
+
var events = await fetch(url, { headers: header || {} })
|
|
223
|
+
const json = await events.json();
|
|
224
|
+
resolveCallback(json);
|
|
225
|
+
} catch (error) {
|
|
226
|
+
rejectCallback(error);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
async function asyncPostForm(url: String, headers: Object, form: Object, resolveCallback: Function, rejectCallback: Function) {
|
|
231
|
+
try {
|
|
232
|
+
console.log('--fetch--asyncPostForm url:', url);
|
|
233
|
+
var events;
|
|
234
|
+
if (Platform.OS === 'ios') {
|
|
235
|
+
events = await QCRRNNetworkModule.postForm(url, headers, form);
|
|
236
|
+
} else {//android
|
|
237
|
+
try {
|
|
238
|
+
headers = headers || {};
|
|
239
|
+
headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
|
|
240
|
+
// 将参数对象中的所有值转换为字符串类型,因为原生只按string类型来处理,否则有其它类型会报解析异常
|
|
241
|
+
const stringifiedForms = {};
|
|
242
|
+
if (form) {
|
|
243
|
+
Object.keys(form).forEach(key => {
|
|
244
|
+
if (typeof form[key] === 'undefined') {
|
|
245
|
+
stringifiedForms[key] = ""; // 将undefined值设为""
|
|
246
|
+
} else {
|
|
247
|
+
stringifiedForms[key] = String(form[key]);
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
console.log('--fetch--asyncPostForm 配置信息:', stringifiedForms);
|
|
252
|
+
events = await QCRRNNetworkModule.postForm(url, headers, stringifiedForms);
|
|
253
|
+
if (typeof events === 'string') {
|
|
254
|
+
events = JSON.parse(events);
|
|
255
|
+
}
|
|
256
|
+
} catch (error) {
|
|
257
|
+
rejectCallback(error);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
resolveCallback(events);
|
|
261
|
+
|
|
262
|
+
} catch (error) {
|
|
263
|
+
rejectCallback(error);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
async function asyncPostJson(url: String, headers: Object, json: Object, resolveCallback: Function, rejectCallback: Function) {
|
|
268
|
+
try {
|
|
269
|
+
console.log('--fetch--asyncPostJson url:', url);
|
|
270
|
+
var events;
|
|
271
|
+
if (Platform.OS === 'ios') {
|
|
272
|
+
events = await QCRRNNetworkModule.postJSON(url, headers, json);
|
|
273
|
+
} else {//android
|
|
274
|
+
try {
|
|
275
|
+
headers = headers || {};
|
|
276
|
+
headers['Content-Type'] = 'application/json';
|
|
277
|
+
headers['Accept'] = 'application/json';
|
|
278
|
+
|
|
279
|
+
// let jsonparam = {};
|
|
280
|
+
let jsonparam = json ? json : {};
|
|
281
|
+
console.log('--fetch--asyncPostJson 配置信息:', jsonparam);
|
|
282
|
+
events = await QCRRNNetworkModule.postJSON(url, headers, jsonparam);
|
|
283
|
+
if (typeof events === 'string') {
|
|
284
|
+
events = JSON.parse(events);
|
|
285
|
+
}
|
|
286
|
+
} catch (error) {
|
|
287
|
+
rejectCallback(error);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
resolveCallback(events);
|
|
291
|
+
} catch (error) {
|
|
292
|
+
rejectCallback(error);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
async function asyncPostFormFetch(url: String, header: Object, params: Object, resolveCallback: Function, rejectCallback: Function) {
|
|
297
|
+
try {
|
|
298
|
+
let headerDic = header || {}
|
|
299
|
+
headerDic['Content-Type'] = "application/x-www-form-urlencoded; charset=utf-8";
|
|
300
|
+
let requestBody = '';
|
|
301
|
+
if (params) {
|
|
302
|
+
for (let key in params) {
|
|
303
|
+
requestBody += `${key}=${params[key] || ''}&`
|
|
304
|
+
}
|
|
305
|
+
requestBody = requestBody.length > 0 ? requestBody.slice(0, -1) : ""
|
|
306
|
+
}
|
|
307
|
+
var events = await fetch(url, { method: 'POST', headers: headerDic, body: requestBody })
|
|
308
|
+
const json = await events.json();
|
|
309
|
+
resolveCallback(json);
|
|
310
|
+
} catch (error) {
|
|
311
|
+
rejectCallback(error);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
async function asyncPostJsonFetch(url: String, header: Object, params: Object, resolveCallback: Function, rejectCallback: Function) {
|
|
316
|
+
try {
|
|
317
|
+
let headerDic = header || {}
|
|
318
|
+
headerDic['Content-Type'] = "application/json";
|
|
319
|
+
var events = await fetch(url, { method: 'POST', headers: headerDic, body: JSON.stringify(params) })
|
|
320
|
+
const json = await events.json();
|
|
321
|
+
resolveCallback(json);
|
|
322
|
+
} catch (error) {
|
|
323
|
+
rejectCallback(error);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// let file = {uri: params.path, type: 'application/octet-stream', name: 'image.jpg'};
|
|
328
|
+
async function asyncPostFile(url: String, header: Object, param: Object, files: Array, resolveCallback: Function, rejectCallback: Function) {
|
|
329
|
+
try {
|
|
330
|
+
var events = await QCRRNNetworkModule.postFile(url, header, param, files);
|
|
331
|
+
resolveCallback(events);
|
|
332
|
+
} catch (error) {
|
|
333
|
+
rejectCallback(error);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
async function asyncPostFileFromFetch(url: String, header: Object, param: Object, files: Array, resolveCallback: Function, rejectCallback: Function) {
|
|
338
|
+
try {
|
|
339
|
+
let headerDic = JSON.parse(JSON.stringify(header));
|
|
340
|
+
headerDic['Content-Type'] = 'multipart/form-data';
|
|
341
|
+
|
|
342
|
+
const fd = new FormData()
|
|
343
|
+
files.forEach((element, index) => {
|
|
344
|
+
const fileKey = element['fileKey'];
|
|
345
|
+
fd.append(fileKey, element)
|
|
346
|
+
})
|
|
347
|
+
for (var key in param) {
|
|
348
|
+
fd.append(key, param[key]);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
var events = await fetch(url, {
|
|
352
|
+
method: 'POST',
|
|
353
|
+
body: fd,
|
|
354
|
+
headers: headerDic
|
|
355
|
+
})
|
|
356
|
+
const json = await events.json();
|
|
357
|
+
resolveCallback(json);
|
|
358
|
+
} catch (error) {
|
|
359
|
+
rejectCallback(error);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
async function asyncDownFile(url: String, fileName: String, resolveCallback: Function, rejectCallback: Function) {
|
|
364
|
+
try {
|
|
365
|
+
var events = await QCRRNNetworkModule.downFile(url, fileName);
|
|
366
|
+
resolveCallback(events);
|
|
367
|
+
} catch (error) {
|
|
368
|
+
rejectCallback(error);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
async function asyncDownFileRN(url: String, fileName: String, resolveCallback: Function, rejectCallback: Function) {
|
|
373
|
+
let timestamp = (new Date()).getTime();//获取当前时间错
|
|
374
|
+
let random = String(((Math.random() * 1000000) | 0))//六位随机数
|
|
375
|
+
let dirs = Platform.OS === 'ios' ? RNFS.LibraryDirectoryPath : RNFS.ExternalDirectoryPath; //外部文件,共享目录的绝对路径(仅限android)
|
|
376
|
+
const downloadDest = `${dirs}/${fileName}`;
|
|
377
|
+
const formUrl = url;
|
|
378
|
+
const options = {
|
|
379
|
+
fromUrl: formUrl,
|
|
380
|
+
toFile: downloadDest,
|
|
381
|
+
background: true,
|
|
382
|
+
begin: (res) => {
|
|
383
|
+
console.log('begin', res);
|
|
384
|
+
console.log('contentLength:', res.contentLength / 1024 / 1024, 'M');
|
|
385
|
+
},
|
|
386
|
+
};
|
|
387
|
+
try {
|
|
388
|
+
const ret = RNFS.downloadFile(options);
|
|
389
|
+
ret.promise.then(res => {
|
|
390
|
+
console.log('success', res);
|
|
391
|
+
console.log('file://' + downloadDest)
|
|
392
|
+
let promise = CameraRoll.saveToCameraRoll(downloadDest);
|
|
393
|
+
promise.then(function (result) {
|
|
394
|
+
resolveCallback(result);
|
|
395
|
+
}).catch(function (error) {
|
|
396
|
+
console.log('error', error);
|
|
397
|
+
rejectCallback(new Error(error))
|
|
398
|
+
});
|
|
399
|
+
}).catch(err => {
|
|
400
|
+
rejectCallback(new Error(err))
|
|
401
|
+
});
|
|
402
|
+
} catch (e) {
|
|
403
|
+
rejectCallback(new Error(e))
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
async function asyncCancel(url: String, resolveCallback: Function, rejectCallback: Function) {
|
|
408
|
+
if (!QCRRNNetworkModule) {
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
try {
|
|
412
|
+
var events = await QCRRNNetworkModule.cancel(url);
|
|
413
|
+
resolveCallback(events);
|
|
414
|
+
} catch (error) {
|
|
415
|
+
rejectCallback(error);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
module.exports = NetworkModule;
|