ming_node 3.0.1 → 3.0.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/README.md +7 -0
- package/beforeTest/a.csv +3 -0
- package/beforeTest/net/TcpServerTest.js +1 -1
- package/beforeTest/net/UdpServerTest.js +1 -1
- package/beforeTest/readcvv.js +11 -0
- package/beforeTest/static/a.json +3 -0
- package/beforeTest/static/a.json5 +3 -0
- package/beforeTest/test.js +2 -5
- package/extlib/MingExcelTool.js +75 -0
- package/index.js +167 -144
- package/module/net/TcpServer.js +6 -6
- package/module/net/es/TcpServer.js +109 -0
- package/package.json +1 -1
package/README.md
CHANGED
@@ -220,3 +220,10 @@ https://minglie.github.io/os/ming_node/
|
|
220
220
|
# ming_node使用文档
|
221
221
|
|
222
222
|
https://www.yuque.com/docs/share/e1f16015-0719-4ffd-9464-a35610389153?# 《ming_node》
|
223
|
+
|
224
|
+
|
225
|
+
# ming_node使用文档
|
226
|
+
|
227
|
+
https://www.yuque.com/docs/share/e1f16015-0719-4ffd-9464-a35610389153?# 《ming_node》
|
228
|
+
|
229
|
+
https://unpkg.com/minglitlie-test/h5/index.html
|
package/beforeTest/a.csv
ADDED
package/beforeTest/test.js
CHANGED
@@ -0,0 +1,75 @@
|
|
1
|
+
const ExcelJS = require('exceljs');
|
2
|
+
|
3
|
+
class MingExcelTool {
|
4
|
+
worksheet;
|
5
|
+
constructor(path,indexOrName) {
|
6
|
+
this.path=path;
|
7
|
+
this.indexOrName=indexOrName;
|
8
|
+
}
|
9
|
+
async init(){
|
10
|
+
const workbook = new ExcelJS.Workbook();
|
11
|
+
this.workbook=workbook;
|
12
|
+
await workbook.xlsx.readFile(this.path);
|
13
|
+
this.worksheet = workbook.getWorksheet(this.indexOrName);
|
14
|
+
}
|
15
|
+
|
16
|
+
getCell(cellName){
|
17
|
+
const cell =this.worksheet.getCell(cellName);
|
18
|
+
return cell.value;
|
19
|
+
}
|
20
|
+
|
21
|
+
getColumn(indexOrKey){
|
22
|
+
const col =this.worksheet.getColumn(indexOrKey);
|
23
|
+
let r=[];
|
24
|
+
col.eachCell((cell, rowNumber) => {
|
25
|
+
if( "object"==typeof cell.value ){
|
26
|
+
if(cell.value==null){
|
27
|
+
r.push("");
|
28
|
+
}else{
|
29
|
+
r.push(cell.value.result);
|
30
|
+
}
|
31
|
+
}else {
|
32
|
+
r.push(cell.value);
|
33
|
+
}
|
34
|
+
});
|
35
|
+
return r;
|
36
|
+
}
|
37
|
+
|
38
|
+
getRow(indexOrKey){
|
39
|
+
const col =this.worksheet.getRow(indexOrKey);
|
40
|
+
let r=[];
|
41
|
+
col.eachCell((cell, rowNumber) => {
|
42
|
+
if( "object"==typeof cell.value ){
|
43
|
+
r.push(cell.value.result);
|
44
|
+
}else {
|
45
|
+
r.push(cell.value);
|
46
|
+
}
|
47
|
+
});
|
48
|
+
return r;
|
49
|
+
}
|
50
|
+
|
51
|
+
setCell(cellName,val){
|
52
|
+
this.worksheet.getCell(cellName).value = val;
|
53
|
+
}
|
54
|
+
|
55
|
+
async save(fileName){
|
56
|
+
await this.workbook.xlsx.writeFile(fileName);
|
57
|
+
}
|
58
|
+
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
function test(){
|
63
|
+
const me= new MingExcelTool('hq.xlsx',1 );
|
64
|
+
async function main(){
|
65
|
+
await me.init();
|
66
|
+
let c= me.getColumn(3);
|
67
|
+
me.setCell("H4","wer")
|
68
|
+
await me.save("D:/ming.xlsx")
|
69
|
+
console.log(c);
|
70
|
+
}
|
71
|
+
main()
|
72
|
+
}
|
73
|
+
|
74
|
+
test()
|
75
|
+
module.exports = MingExcelTool;
|
package/index.js
CHANGED
@@ -3,19 +3,19 @@
|
|
3
3
|
* By : Minglie
|
4
4
|
* QQ: 934031452
|
5
5
|
* Date :2021.12.01
|
6
|
-
* version :
|
6
|
+
* version :3.0.3
|
7
7
|
*/
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
8
|
+
const http = require('http');
|
9
|
+
const https = require('https');
|
10
|
+
const url_module = require('url');
|
11
|
+
const querystring = require('querystring');
|
12
|
+
const fs = require('fs');
|
13
|
+
const path = require('path');
|
14
|
+
const child_process = require('child_process');
|
15
|
+
const EventEmitter = require('events').EventEmitter;
|
16
|
+
const event = new EventEmitter();
|
17
|
+
const privateObj = {};//本文件私有对象
|
18
|
+
const M = {};
|
19
19
|
M.privateObj=privateObj;
|
20
20
|
M.sessions = {}//保存session
|
21
21
|
M.con_display_status_enable = false;//是否显示响应状态码
|
@@ -134,9 +134,9 @@ M.get = function (url, callback, data, headers) {
|
|
134
134
|
}
|
135
135
|
//合并请求头
|
136
136
|
headers = privateObj.getFunctionOrObjResult(M.reqComHeaders, headers)
|
137
|
-
|
138
|
-
|
139
|
-
|
137
|
+
let html = '';
|
138
|
+
let urlObj = url_module.parse(url)
|
139
|
+
let options = {
|
140
140
|
hostname: urlObj.hostname,
|
141
141
|
port: urlObj.port,
|
142
142
|
path: urlObj.path + getData,
|
@@ -159,7 +159,7 @@ M.get = function (url, callback, data, headers) {
|
|
159
159
|
if (options == false) {
|
160
160
|
return;
|
161
161
|
}
|
162
|
-
|
162
|
+
let req = reqHttp.request(options, function (res) {
|
163
163
|
if (M.con_display_status_enable) console.log('STATUS:' + res.statusCode);
|
164
164
|
if (global.debug && res.statusCode != 200) {
|
165
165
|
while (1) {
|
@@ -189,8 +189,6 @@ M.get = function (url, callback, data, headers) {
|
|
189
189
|
});
|
190
190
|
req.on('error', function (err) {
|
191
191
|
reject(err);
|
192
|
-
console.error(err);
|
193
|
-
|
194
192
|
});
|
195
193
|
req.end();
|
196
194
|
})
|
@@ -206,10 +204,10 @@ M._request = function (url, callback, data, headers,methed) {
|
|
206
204
|
}
|
207
205
|
|
208
206
|
url = privateObj.appendDataToUrl(url, M.reqComQueryparams);
|
209
|
-
|
210
|
-
|
207
|
+
let html = '';
|
208
|
+
let urlObj = url_module.parse(url)
|
211
209
|
//发送 http Post 请求
|
212
|
-
|
210
|
+
let postData = querystring.stringify(data);
|
213
211
|
if( headers["Content-Type"]==undefined){
|
214
212
|
headers["Content-Type"] ="application/json";
|
215
213
|
}
|
@@ -225,7 +223,7 @@ M._request = function (url, callback, data, headers,methed) {
|
|
225
223
|
|
226
224
|
//合并请求头
|
227
225
|
headers = privateObj.getFunctionOrObjResult(M.reqComHeaders, headers)
|
228
|
-
|
226
|
+
let options = {
|
229
227
|
hostname: urlObj.hostname,
|
230
228
|
port: urlObj.port,
|
231
229
|
path: urlObj.path,
|
@@ -244,7 +242,7 @@ M._request = function (url, callback, data, headers,methed) {
|
|
244
242
|
}
|
245
243
|
|
246
244
|
return new Promise((resolve, reject) => {
|
247
|
-
|
245
|
+
let req = reqHttp.request(options, function (res) {
|
248
246
|
options = M.httpBefore(options);
|
249
247
|
if (options == false) {
|
250
248
|
return;
|
@@ -276,8 +274,7 @@ M._request = function (url, callback, data, headers,methed) {
|
|
276
274
|
});
|
277
275
|
|
278
276
|
req.on('error', function (err) {
|
279
|
-
|
280
|
-
throw err;
|
277
|
+
reject(err);
|
281
278
|
});
|
282
279
|
if(methed !="GET") req.write(postData);
|
283
280
|
req.end();
|
@@ -296,10 +293,10 @@ M.postJson = function (url, callback, data, headers) {
|
|
296
293
|
};
|
297
294
|
}
|
298
295
|
url = privateObj.appendDataToUrl(url, M.reqComQueryparams);
|
299
|
-
|
300
|
-
|
296
|
+
let html = '';
|
297
|
+
let urlObj = url_module.parse(url)
|
301
298
|
//发送 http Post 请求
|
302
|
-
|
299
|
+
let postData = JSON.stringify(data);
|
303
300
|
if (!headers) {
|
304
301
|
headers = {
|
305
302
|
'Content-Type': 'application/json; ' +
|
@@ -309,7 +306,7 @@ M.postJson = function (url, callback, data, headers) {
|
|
309
306
|
}
|
310
307
|
//合并请求头
|
311
308
|
headers = privateObj.getFunctionOrObjResult(M.reqComHeaders, headers)
|
312
|
-
|
309
|
+
let options = {
|
313
310
|
hostname: urlObj.hostname,
|
314
311
|
port: urlObj.port,
|
315
312
|
path: urlObj.path,
|
@@ -329,7 +326,7 @@ M.postJson = function (url, callback, data, headers) {
|
|
329
326
|
|
330
327
|
return new Promise((resolve, reject) => {
|
331
328
|
|
332
|
-
|
329
|
+
let req = reqHttp.request(options, function (res) {
|
333
330
|
options = M.httpBefore(options);
|
334
331
|
if (options == false) {
|
335
332
|
return;
|
@@ -361,8 +358,7 @@ M.postJson = function (url, callback, data, headers) {
|
|
361
358
|
});
|
362
359
|
|
363
360
|
req.on('error', function (err) {
|
364
|
-
|
365
|
-
throw err;
|
361
|
+
reject(err);
|
366
362
|
});
|
367
363
|
req.write(postData);
|
368
364
|
req.end();
|
@@ -393,7 +389,7 @@ M.require =async function (url,noCache) {
|
|
393
389
|
console.log("req require remote url:", url);
|
394
390
|
let promise = new Promise(function (reslove, reject) {
|
395
391
|
require(ht).get(url, function (req, res) {
|
396
|
-
|
392
|
+
let d = '';
|
397
393
|
req.on('data', (data) => {
|
398
394
|
d += data;
|
399
395
|
});
|
@@ -444,7 +440,7 @@ M.import=async function (url,callback){
|
|
444
440
|
*下载图片
|
445
441
|
*/
|
446
442
|
M.download =async function (url, file) {
|
447
|
-
|
443
|
+
let func = http;
|
448
444
|
if (url.indexOf("https") >= 0) {
|
449
445
|
func = https;
|
450
446
|
}
|
@@ -464,23 +460,24 @@ M.download =async function (url, file) {
|
|
464
460
|
*下载所有图片
|
465
461
|
*/
|
466
462
|
M.downloadAllImg = function (url, file, callback) {
|
467
|
-
|
468
|
-
|
463
|
+
let urlObj = url_module.parse(url)
|
464
|
+
let options = {
|
469
465
|
hostname: urlObj.hostname,
|
470
466
|
}
|
471
|
-
|
467
|
+
let func = http;
|
472
468
|
if (url.indexOf("https") >= 0) {
|
473
469
|
func = https;
|
474
470
|
}
|
475
|
-
|
471
|
+
let req = func.request(options, function (res) {
|
472
|
+
res.setEncoding('utf-8');
|
476
473
|
res.on('data', function (data) {
|
477
474
|
//Buffer
|
478
|
-
|
479
|
-
|
480
|
-
|
475
|
+
let string = data.toString();
|
476
|
+
let rule = /https?:\/\/.[^"]+\.(png|jpg|gif|jpeg)/gi;
|
477
|
+
let ary = string.match(rule); //拿到所有jpg结尾的链接集合
|
481
478
|
if (callback) callback(ary);
|
482
|
-
|
483
|
-
for (
|
479
|
+
let x = 0;
|
480
|
+
for (let i in ary) {
|
484
481
|
M.download(ary[i], file + (x++) + ary[i].substr(ary[i].lastIndexOf(".")));
|
485
482
|
}
|
486
483
|
});
|
@@ -599,8 +596,8 @@ M.mkdir = function (dirpath, dirname) {
|
|
599
596
|
M.copyDir = function (src, dst) {
|
600
597
|
let paths = fs.readdirSync(src); //同步读取当前目录
|
601
598
|
paths.forEach(function (path) {
|
602
|
-
|
603
|
-
|
599
|
+
let _src = src + '/' + path;
|
600
|
+
let _dst = dst + '/' + path;
|
604
601
|
fs.stat(_src, function (err, stats) { //stats 该对象 包含文件属性
|
605
602
|
if (err) throw err;
|
606
603
|
if (stats.isFile()) { //如果是个文件则拷贝
|
@@ -643,7 +640,7 @@ M.appendFile = function (file, str) {
|
|
643
640
|
*/
|
644
641
|
M.getObjByFile = function (file) {
|
645
642
|
data = M.readFile(file) || "[]"
|
646
|
-
|
643
|
+
let obj = JSON.parse(data.toString());
|
647
644
|
return obj;
|
648
645
|
}
|
649
646
|
M.writeObjToFile = function (file, obj) {
|
@@ -652,7 +649,7 @@ M.writeObjToFile = function (file, obj) {
|
|
652
649
|
|
653
650
|
M.addObjToFile = function (file, obj) {
|
654
651
|
try {
|
655
|
-
|
652
|
+
let d = M.getObjByFile(file);
|
656
653
|
M.writeObjToFile(file, [...d, obj]);
|
657
654
|
} catch (e) {
|
658
655
|
M.writeObjToFile(file, [obj]);
|
@@ -665,8 +662,8 @@ M.deleteObjByIdFile = function (file, id) {
|
|
665
662
|
} else {
|
666
663
|
ids = id;
|
667
664
|
}
|
668
|
-
|
669
|
-
|
665
|
+
let d = M.getObjByFile(file);
|
666
|
+
let d1 = M.getObjByFile(file);
|
670
667
|
let d_num = 0;
|
671
668
|
for (let i = 0; i < d1.length; i++) {
|
672
669
|
if (ids.indexOf(d1[i].id) >= 0) {
|
@@ -681,8 +678,8 @@ M.deleteObjByIdFile = function (file, id) {
|
|
681
678
|
M.deleteObjByPropFile = function (file, o) {
|
682
679
|
let o_key = Object.keys(o)[0];
|
683
680
|
let o_val = o[o_key]
|
684
|
-
|
685
|
-
|
681
|
+
let d = M.getObjByFile(file);
|
682
|
+
let d1 = M.getObjByFile(file);
|
686
683
|
let d_num = 0;
|
687
684
|
for (let i = 0; i < d1.length; i++) {
|
688
685
|
if (d1[i][o_key] == o_val) {
|
@@ -695,7 +692,7 @@ M.deleteObjByPropFile = function (file, o) {
|
|
695
692
|
}
|
696
693
|
|
697
694
|
M.updateObjByIdFile = function (file, obj) {
|
698
|
-
|
695
|
+
let d = M.getObjByFile(file);
|
699
696
|
for (let i = 0; i < d.length; i++) {
|
700
697
|
if (d[i].id == obj.id) {
|
701
698
|
d.splice(i, 1, Object.assign(d[i],obj));
|
@@ -705,7 +702,7 @@ M.updateObjByIdFile = function (file, obj) {
|
|
705
702
|
M.writeObjToFile(file, d);
|
706
703
|
}
|
707
704
|
M.getObjByIdFile = function (file, id) {
|
708
|
-
|
705
|
+
let d = M.getObjByFile(file);
|
709
706
|
for (let i = 0; i < d.length; i++) {
|
710
707
|
if (d[i].id == id) {
|
711
708
|
return d[i];
|
@@ -713,7 +710,7 @@ M.getObjByIdFile = function (file, id) {
|
|
713
710
|
}
|
714
711
|
}
|
715
712
|
M.listAllObjByPropFile = function (file, caseObj) {
|
716
|
-
|
713
|
+
let d = M.getObjByFile(file);
|
717
714
|
let o_keys = Object.keys(caseObj);
|
718
715
|
if (caseObj && o_keys.length>0) {
|
719
716
|
let r_list = [];
|
@@ -814,13 +811,14 @@ M.getAttribute = function (k) {
|
|
814
811
|
M.readLine =async function (file, callback) {
|
815
812
|
let lineCount=0;
|
816
813
|
return new Promise((resolve, reject) =>{
|
817
|
-
|
818
|
-
|
814
|
+
let remaining = '';
|
815
|
+
let input = fs.createReadStream(file);
|
816
|
+
input.setEncoding('utf-8');
|
819
817
|
input.on('data', function (data) {
|
820
818
|
remaining += data;
|
821
|
-
|
819
|
+
let index = remaining.indexOf('\n');
|
822
820
|
while (index > -1) {
|
823
|
-
|
821
|
+
let line = remaining.substring(0, index);
|
824
822
|
remaining = remaining.substring(index + 1);
|
825
823
|
lineCount++;
|
826
824
|
callback(line);
|
@@ -836,8 +834,33 @@ M.readLine =async function (file, callback) {
|
|
836
834
|
|
837
835
|
|
838
836
|
M.readCsvLine =async function (file, callback) {
|
837
|
+
function parseStringToArray(str) {
|
838
|
+
const result = [];
|
839
|
+
let temp = '';
|
840
|
+
let inQuotes = false;
|
841
|
+
for (let i = 0; i < str.length; i++) {
|
842
|
+
const char = str[i];
|
843
|
+
if (char === ',' && !inQuotes) {
|
844
|
+
result.push(temp.trim());
|
845
|
+
temp = '';
|
846
|
+
} else if (char === '"') {
|
847
|
+
if (inQuotes && str[i + 1] === '"') {
|
848
|
+
temp += '"';
|
849
|
+
i++;
|
850
|
+
} else {
|
851
|
+
inQuotes = !inQuotes;
|
852
|
+
}
|
853
|
+
} else {
|
854
|
+
temp += char;
|
855
|
+
}
|
856
|
+
}
|
857
|
+
|
858
|
+
result.push(temp.trim());
|
859
|
+
|
860
|
+
return result;
|
861
|
+
}
|
839
862
|
return M.readLine(file, function (line) {
|
840
|
-
callback(line
|
863
|
+
callback(parseStringToArray(line));
|
841
864
|
})
|
842
865
|
}
|
843
866
|
|
@@ -855,7 +878,7 @@ M.getFileList = function (path) {
|
|
855
878
|
function walk(file) {
|
856
879
|
states = fs.statSync(path + '/' + file);
|
857
880
|
if (states.isDirectory()) {
|
858
|
-
|
881
|
+
let item;
|
859
882
|
if (targetObj["children"]) {
|
860
883
|
item = {name: file, children: [], value: path + '/' + file};
|
861
884
|
targetObj["children"].push(item);
|
@@ -867,24 +890,24 @@ M.getFileList = function (path) {
|
|
867
890
|
readFile(path + '/' + file, filesList, item);
|
868
891
|
} else {
|
869
892
|
//创建一个对象保存信息
|
870
|
-
|
893
|
+
let obj = new Object();
|
871
894
|
obj.size = states.size;//文件大小,以字节为单位
|
872
895
|
obj.name = file;//文件名
|
873
896
|
obj.path = path + '/' + file; //文件绝对路径
|
874
897
|
|
875
898
|
if (targetObj["children"]) {
|
876
|
-
|
899
|
+
let item = {name: file, value: obj.path}
|
877
900
|
targetObj["children"].push(item);
|
878
901
|
} else {
|
879
|
-
|
902
|
+
let item = {name: file, value: obj.path};
|
880
903
|
filesList.push(item);
|
881
904
|
}
|
882
905
|
}
|
883
906
|
}
|
884
907
|
}
|
885
908
|
|
886
|
-
|
887
|
-
|
909
|
+
let filesList = [];
|
910
|
+
let targetObj = {};
|
888
911
|
readFile(path, filesList, targetObj);
|
889
912
|
return filesList;
|
890
913
|
}
|
@@ -897,7 +920,7 @@ M.getFileDirList = function (path) {
|
|
897
920
|
function walk(file) {
|
898
921
|
states = fs.statSync(path + '/' + file);
|
899
922
|
if (states.isDirectory()) {
|
900
|
-
|
923
|
+
let item;
|
901
924
|
let dir=path + '/' + file;
|
902
925
|
if(dir.indexOf("lib")==-1){
|
903
926
|
dirList.push(path + '/' + file)
|
@@ -913,9 +936,9 @@ M.getFileDirList = function (path) {
|
|
913
936
|
}
|
914
937
|
}
|
915
938
|
}
|
916
|
-
|
917
|
-
|
918
|
-
|
939
|
+
let dirList=[]
|
940
|
+
let filesList = [];
|
941
|
+
let targetObj = {};
|
919
942
|
readFile(path, filesList, targetObj);
|
920
943
|
return dirList;
|
921
944
|
}
|
@@ -967,10 +990,10 @@ M.getSqlite = function (dbName) {
|
|
967
990
|
if (M.sqlite) {
|
968
991
|
return M.sqlite;
|
969
992
|
}
|
970
|
-
|
971
|
-
|
993
|
+
let SQLite3 = require('sqlite3').verbose();
|
994
|
+
let Db = new SQLite3.Database(dbName || "ming_autotest.db");
|
972
995
|
Db.doSql = function doSql(sql) {
|
973
|
-
|
996
|
+
let promise = new Promise(function (reslove, reject) {
|
974
997
|
if (Db.display_sql_enable) {
|
975
998
|
M.log(sql)
|
976
999
|
}
|
@@ -1008,7 +1031,7 @@ M.getMySql = function (dbConfig) {
|
|
1008
1031
|
if (M.mysql) {
|
1009
1032
|
return M.mysql;
|
1010
1033
|
}
|
1011
|
-
|
1034
|
+
let mysql = require('mysql');
|
1012
1035
|
let defaultDbConfig = {
|
1013
1036
|
"host": dbConfig.host || "localhost",
|
1014
1037
|
"user": dbConfig.user || "root",
|
@@ -1019,10 +1042,10 @@ M.getMySql = function (dbConfig) {
|
|
1019
1042
|
dateStrings: true,
|
1020
1043
|
timezone: "08:00"
|
1021
1044
|
}
|
1022
|
-
|
1045
|
+
let Db = {};
|
1023
1046
|
Db.dbConfig=defaultDbConfig;
|
1024
1047
|
console.log("connect mysql", defaultDbConfig)
|
1025
|
-
|
1048
|
+
let pool = mysql.createPool(defaultDbConfig);
|
1026
1049
|
Db.pool=pool;
|
1027
1050
|
Db.getConnection= function(callback){
|
1028
1051
|
return new Promise(((resolve, reject) => {
|
@@ -1039,7 +1062,7 @@ M.getMySql = function (dbConfig) {
|
|
1039
1062
|
if (Db.display_sql_enable) {
|
1040
1063
|
M.log(sql)
|
1041
1064
|
}
|
1042
|
-
|
1065
|
+
let promise = new Promise(function (reslove, reject) {
|
1043
1066
|
pool.getConnection(function (err, connection) {
|
1044
1067
|
connection.query(sql, params, function (err, rows) {
|
1045
1068
|
if (err) {
|
@@ -1062,7 +1085,7 @@ M.getMySql = function (dbConfig) {
|
|
1062
1085
|
if (Db.display_sql_enable) {
|
1063
1086
|
M.log(sql)
|
1064
1087
|
}
|
1065
|
-
|
1088
|
+
let promise = new Promise(function (reslove, reject) {
|
1066
1089
|
connection.query(sql, params, function (err, rows) {
|
1067
1090
|
if (err) {
|
1068
1091
|
reject(err);
|
@@ -1111,11 +1134,11 @@ M.getMongoDB = function (dbConfig) {
|
|
1111
1134
|
if (M.mongoDb) {
|
1112
1135
|
return M.mongoDb;
|
1113
1136
|
}
|
1114
|
-
|
1115
|
-
|
1137
|
+
let MongoDB=require('mongodb');
|
1138
|
+
let MongoClient =MongoDB.MongoClient;
|
1116
1139
|
const ObjectID = MongoDB.ObjectID;
|
1117
1140
|
|
1118
|
-
|
1141
|
+
let Config={
|
1119
1142
|
dbUrl: dbConfig.dbUrl|| 'mongodb://localhost:27017/',
|
1120
1143
|
dbName: dbConfig.dbName|| 'miapi'
|
1121
1144
|
};
|
@@ -1146,7 +1169,7 @@ M.getMongoDB = function (dbConfig) {
|
|
1146
1169
|
}
|
1147
1170
|
return new Promise((resolve,reject)=>{
|
1148
1171
|
MingMongoClient.connect().then((db)=>{
|
1149
|
-
|
1172
|
+
let result=db.collection(collectionName).find(json);
|
1150
1173
|
result.toArray(function(err,docs){
|
1151
1174
|
if(err){
|
1152
1175
|
reject(err);
|
@@ -1242,7 +1265,7 @@ M.getMongoDB = function (dbConfig) {
|
|
1242
1265
|
}
|
1243
1266
|
return new Promise((resolve,reject)=>{
|
1244
1267
|
MingMongoClient.connect().then((db)=>{
|
1245
|
-
|
1268
|
+
let whereArgs = {
|
1246
1269
|
_id: new ObjectID(id)
|
1247
1270
|
};
|
1248
1271
|
db.collection(collectionName).findOne(whereArgs,{},function(err,result){
|
@@ -1271,8 +1294,8 @@ M.getMongoDB = function (dbConfig) {
|
|
1271
1294
|
* ----------------------Sql CRUD START-------------------------------------------
|
1272
1295
|
*/
|
1273
1296
|
M.getInsertObjSql = function (tableName, obj) {
|
1274
|
-
|
1275
|
-
|
1297
|
+
let fields = "(";
|
1298
|
+
let values = "(";
|
1276
1299
|
for (let field in obj) {
|
1277
1300
|
fields += field + ",";
|
1278
1301
|
values += `'${obj[field]}'` + ",";
|
@@ -1286,7 +1309,7 @@ M.getInsertObjSql = function (tableName, obj) {
|
|
1286
1309
|
}
|
1287
1310
|
|
1288
1311
|
M.getDeleteObjSql = function (tableName, obj) {
|
1289
|
-
|
1312
|
+
let fields = [];
|
1290
1313
|
for (let field in obj) {
|
1291
1314
|
fields.push(field);
|
1292
1315
|
}
|
@@ -1296,7 +1319,7 @@ M.getDeleteObjSql = function (tableName, obj) {
|
|
1296
1319
|
}
|
1297
1320
|
|
1298
1321
|
M.getUpdateObjSql = function (tableName, obj, caseObj) {
|
1299
|
-
|
1322
|
+
let fields = [];
|
1300
1323
|
for (let field in obj) {
|
1301
1324
|
if (field != "id")
|
1302
1325
|
fields.push(field);
|
@@ -1305,7 +1328,7 @@ M.getUpdateObjSql = function (tableName, obj, caseObj) {
|
|
1305
1328
|
if (!caseObj) {
|
1306
1329
|
sql = `update ${tableName} set ${fields.map(u => u + "='" + obj[u] + "'")} where id=${obj.id}`;
|
1307
1330
|
} else {
|
1308
|
-
|
1331
|
+
let caseObjfields = [];
|
1309
1332
|
for (let caseObjfield in caseObj) {
|
1310
1333
|
caseObjfields.push(caseObjfield)
|
1311
1334
|
}
|
@@ -1317,7 +1340,7 @@ M.getUpdateObjSql = function (tableName, obj, caseObj) {
|
|
1317
1340
|
|
1318
1341
|
|
1319
1342
|
M.getSelectObjSql = function (tableName, obj) {
|
1320
|
-
|
1343
|
+
let fields = [];
|
1321
1344
|
for (let field in obj) {
|
1322
1345
|
fields.push(field);
|
1323
1346
|
}
|
@@ -1343,7 +1366,7 @@ M.getSelectObjSql = function (tableName, obj) {
|
|
1343
1366
|
*封装返回数据
|
1344
1367
|
*/
|
1345
1368
|
M.result = function (data, success,message) {
|
1346
|
-
|
1369
|
+
let r = {};
|
1347
1370
|
if (success == false) {
|
1348
1371
|
r.code = -2;
|
1349
1372
|
r.msg = message||"操作失败";
|
@@ -1353,7 +1376,7 @@ M.result = function (data, success,message) {
|
|
1353
1376
|
}
|
1354
1377
|
r.requestId=M.req? M.req.requestId:"";
|
1355
1378
|
try {
|
1356
|
-
|
1379
|
+
let obj = JSON.parse(data);
|
1357
1380
|
if (typeof obj == 'object' && obj) {
|
1358
1381
|
r.data = obj;
|
1359
1382
|
} else {
|
@@ -1386,7 +1409,7 @@ M.failResult=(msg,code,d)=>{
|
|
1386
1409
|
*获取下划线式的对象
|
1387
1410
|
*/
|
1388
1411
|
M.getUnderlineObj = function (obj) {
|
1389
|
-
|
1412
|
+
let result = {};
|
1390
1413
|
for (let field in obj) {
|
1391
1414
|
result[field.humpToUnderline()] = obj[field]
|
1392
1415
|
}
|
@@ -1397,7 +1420,7 @@ M.getUnderlineObj = function (obj) {
|
|
1397
1420
|
*获取驼峰式的对象
|
1398
1421
|
*/
|
1399
1422
|
M.getHumpObj = function (obj) {
|
1400
|
-
|
1423
|
+
let result = {};
|
1401
1424
|
for (let field in obj) {
|
1402
1425
|
result[field.underlineToHump()] = obj[field]
|
1403
1426
|
}
|
@@ -1410,14 +1433,14 @@ M.randomStr = function () {
|
|
1410
1433
|
|
1411
1434
|
M.urlStringify = function (obj) {
|
1412
1435
|
if (obj !== null && typeof obj === 'object') {
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1416
|
-
|
1417
|
-
for (
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1436
|
+
let keys = Object.keys(obj);
|
1437
|
+
let len = keys.length;
|
1438
|
+
let flast = len - 1;
|
1439
|
+
let fields = '';
|
1440
|
+
for (let i = 0; i < len; ++i) {
|
1441
|
+
let k = keys[i];
|
1442
|
+
let v = obj[k];
|
1443
|
+
let ks = k + "=";
|
1421
1444
|
fields += ks + v;
|
1422
1445
|
if (i < flast)
|
1423
1446
|
fields += "&";
|
@@ -1429,12 +1452,12 @@ M.urlStringify = function (obj) {
|
|
1429
1452
|
|
1430
1453
|
M.urlParse = function (url) {
|
1431
1454
|
url = url.substr(url.indexOf("?") + 1);
|
1432
|
-
|
1455
|
+
let t, n, r, i = url, s = {};
|
1433
1456
|
t = i.split("&"),
|
1434
1457
|
r = null,
|
1435
1458
|
n = null;
|
1436
|
-
for (
|
1437
|
-
|
1459
|
+
for (let o in t) {
|
1460
|
+
let u = t[o].indexOf("=");
|
1438
1461
|
u !== -1 && (r = t[o].substr(0, u),
|
1439
1462
|
n = t[o].substr(u + 1),
|
1440
1463
|
s[r] = n)
|
@@ -1457,7 +1480,7 @@ M.err = function (e) {
|
|
1457
1480
|
|
1458
1481
|
|
1459
1482
|
M.server = function () {
|
1460
|
-
|
1483
|
+
let G = this; /*全局变量,也就是M*/
|
1461
1484
|
//静态资源路径
|
1462
1485
|
this._views = "static";
|
1463
1486
|
//key为去除rest参数的url,val为原始url
|
@@ -1479,8 +1502,9 @@ M.server = function () {
|
|
1479
1502
|
//如果实现此函数,则只能有一个此服务
|
1480
1503
|
this._server = function () {
|
1481
1504
|
};
|
1482
|
-
|
1505
|
+
let app =async function (req, res) {
|
1483
1506
|
try {
|
1507
|
+
req.setEncoding('utf-8');
|
1484
1508
|
M.req=req;
|
1485
1509
|
M.res=res;
|
1486
1510
|
//是否已经发送过了
|
@@ -1497,7 +1521,7 @@ M.server = function () {
|
|
1497
1521
|
//是否为rest请求
|
1498
1522
|
req.isRestRequest = function () {
|
1499
1523
|
if (Object.keys(G._rest).length == 0) return false;
|
1500
|
-
|
1524
|
+
let isRest = false;
|
1501
1525
|
for (let i = 0; i < Object.keys(G._rest).length; i++) {
|
1502
1526
|
if (pathname.startsWith(Object.keys(G._rest)[i])) {
|
1503
1527
|
isRest = true;
|
@@ -1579,9 +1603,9 @@ M.server = function () {
|
|
1579
1603
|
if (!isString) {
|
1580
1604
|
text = JSON.stringify(text);
|
1581
1605
|
}
|
1582
|
-
|
1606
|
+
let pathname = url_module.parse(url).pathname; /*获取url的值*/
|
1583
1607
|
//获取文件的后缀名
|
1584
|
-
|
1608
|
+
let extname = path.extname(pathname);
|
1585
1609
|
res.writeHead(200, {"Content-Type": "" + (privateObj.staticMime[extname] || 'text/html') + ";charset='utf-8'",});
|
1586
1610
|
res.write(text);
|
1587
1611
|
res.end();
|
@@ -1608,7 +1632,7 @@ M.server = function () {
|
|
1608
1632
|
throw e;
|
1609
1633
|
}).pipe(res);
|
1610
1634
|
}else {
|
1611
|
-
|
1635
|
+
let func = http;
|
1612
1636
|
if (url.indexOf("https") >= 0) {
|
1613
1637
|
func = https;
|
1614
1638
|
}
|
@@ -1647,9 +1671,9 @@ M.server = function () {
|
|
1647
1671
|
if (!isString) {
|
1648
1672
|
text = JSON.stringify(text);
|
1649
1673
|
}
|
1650
|
-
|
1674
|
+
let pathname = url_module.parse(url).pathname; /*获取url的值*/
|
1651
1675
|
//获取文件的后缀名
|
1652
|
-
|
1676
|
+
let extname = path.extname(pathname);
|
1653
1677
|
res.writeHead(200, {"Content-Type": "" + (privateObj.staticMime[extname] || 'text/html') + ";charset='utf-8'",});
|
1654
1678
|
let templateStr=""
|
1655
1679
|
try {
|
@@ -1694,13 +1718,13 @@ M.server = function () {
|
|
1694
1718
|
res.end();
|
1695
1719
|
}
|
1696
1720
|
//获取路由
|
1697
|
-
|
1721
|
+
let pathname = url_module.parse(req.url).pathname;
|
1698
1722
|
if (!pathname.endsWith('/')) {
|
1699
1723
|
pathname = pathname + '/';
|
1700
1724
|
}
|
1701
1725
|
// pathname.startsWith("/usr/")
|
1702
1726
|
//获取请求的方式 get post
|
1703
|
-
|
1727
|
+
let method = req.method.toLowerCase();
|
1704
1728
|
if (req.isStaticRequest()) {
|
1705
1729
|
|
1706
1730
|
await G._begin(req, res);
|
@@ -1710,7 +1734,7 @@ M.server = function () {
|
|
1710
1734
|
|
1711
1735
|
//为req加个params用于存放请求参数
|
1712
1736
|
req.params = {};
|
1713
|
-
|
1737
|
+
let mapingPath = "";
|
1714
1738
|
//如果是rest风格的请求,为其封装请求参数
|
1715
1739
|
if (req.isRestRequest()) {
|
1716
1740
|
for (let i = 0; i < Object.keys(G._rest).length; i++) {
|
@@ -1719,7 +1743,7 @@ M.server = function () {
|
|
1719
1743
|
mapingPath = G._rest[pathname];
|
1720
1744
|
}
|
1721
1745
|
}
|
1722
|
-
|
1746
|
+
let realPathName = url_module.parse(req.url).pathname;
|
1723
1747
|
if (!realPathName.endsWith('/')) {
|
1724
1748
|
realPathName = realPathName + '/';
|
1725
1749
|
}
|
@@ -1742,7 +1766,7 @@ M.server = function () {
|
|
1742
1766
|
method == "delete"
|
1743
1767
|
) && (G['_' + method][pathname])) {
|
1744
1768
|
if (method != 'get') { /*执行post请求*/
|
1745
|
-
|
1769
|
+
let postStr = '';
|
1746
1770
|
req.on('data', function (chunk) {
|
1747
1771
|
postStr += chunk;
|
1748
1772
|
})
|
@@ -1859,7 +1883,7 @@ M.server = function () {
|
|
1859
1883
|
app.get = function (url, callback) {
|
1860
1884
|
const single=(url,callback)=>{
|
1861
1885
|
url = M.formatUrl(url);
|
1862
|
-
|
1886
|
+
let realUrl = url;
|
1863
1887
|
if (url.indexOf(":") > 0) {
|
1864
1888
|
url = url.substr(0, url.indexOf(":"));
|
1865
1889
|
G._rest[url] = realUrl;
|
@@ -1874,7 +1898,7 @@ M.server = function () {
|
|
1874
1898
|
app.post = function (url, callback) {
|
1875
1899
|
const single=(url,callback)=>{
|
1876
1900
|
url = M.formatUrl(url);
|
1877
|
-
|
1901
|
+
let realUrl = url;
|
1878
1902
|
if (url.indexOf(":") > 0) {
|
1879
1903
|
url = url.substr(0, url.indexOf(":"));
|
1880
1904
|
G._rest[url] = realUrl;
|
@@ -1887,7 +1911,7 @@ M.server = function () {
|
|
1887
1911
|
app.put = function (url, callback) {
|
1888
1912
|
const single=(url,callback)=>{
|
1889
1913
|
url = M.formatUrl(url);
|
1890
|
-
|
1914
|
+
let realUrl = url;
|
1891
1915
|
if (url.indexOf(":") > 0) {
|
1892
1916
|
url = url.substr(0, url.indexOf(":"));
|
1893
1917
|
G._rest[url] = realUrl;
|
@@ -1900,7 +1924,7 @@ M.server = function () {
|
|
1900
1924
|
app.delete = function (url, callback) {
|
1901
1925
|
const single=(url,callback)=>{
|
1902
1926
|
url = M.formatUrl(url);
|
1903
|
-
|
1927
|
+
let realUrl = url;
|
1904
1928
|
if (url.indexOf(":") > 0) {
|
1905
1929
|
url = url.substr(0, url.indexOf(":"));
|
1906
1930
|
G._rest[url] = realUrl;
|
@@ -1915,7 +1939,7 @@ M.server = function () {
|
|
1915
1939
|
app.mapping = function (url, callback) {
|
1916
1940
|
const single=(url,callback)=>{
|
1917
1941
|
url = M.formatUrl(url);
|
1918
|
-
|
1942
|
+
let realUrl = url;
|
1919
1943
|
if (url.indexOf(":") > 0) {
|
1920
1944
|
url = url.substr(0, url.indexOf(":"));
|
1921
1945
|
G._rest[url] = realUrl;
|
@@ -2029,6 +2053,7 @@ M.getAxiosConfig = async (req) => {
|
|
2029
2053
|
axiosConfig.method = req.method.toLocaleLowerCase();
|
2030
2054
|
axiosConfig.headers = req.headers
|
2031
2055
|
let postStr = '';
|
2056
|
+
req.setEncoding('utf-8');
|
2032
2057
|
req.on('data', function (chunk) {
|
2033
2058
|
postStr += chunk;
|
2034
2059
|
})
|
@@ -2052,8 +2077,8 @@ M.getAxiosConfig = async (req) => {
|
|
2052
2077
|
|
2053
2078
|
M.axios = function (axiosConfig) {
|
2054
2079
|
axiosConfig.headers.host = "";
|
2055
|
-
|
2056
|
-
|
2080
|
+
let urlObj = url_module.parse(axiosConfig.url)
|
2081
|
+
let options = {
|
2057
2082
|
hostname: urlObj.hostname,
|
2058
2083
|
port: urlObj.port,
|
2059
2084
|
path: urlObj.path,
|
@@ -2064,9 +2089,9 @@ M.axios = function (axiosConfig) {
|
|
2064
2089
|
if (axiosConfig.url.startsWith("https")) {
|
2065
2090
|
reqHttp = https;
|
2066
2091
|
}
|
2067
|
-
|
2092
|
+
let html = '';
|
2068
2093
|
return new Promise((resolve, reject) => {
|
2069
|
-
|
2094
|
+
let req = reqHttp.request(options, function (res) {
|
2070
2095
|
options = M.httpBefore(options);
|
2071
2096
|
if (options == false) {
|
2072
2097
|
return;
|
@@ -2082,8 +2107,7 @@ M.axios = function (axiosConfig) {
|
|
2082
2107
|
|
2083
2108
|
});
|
2084
2109
|
req.on('error', function (err) {
|
2085
|
-
|
2086
|
-
throw err;
|
2110
|
+
reject(err);
|
2087
2111
|
});
|
2088
2112
|
req.write(axiosConfig.body);
|
2089
2113
|
req.end();
|
@@ -2108,13 +2132,13 @@ privateObj.dealUseServer = async function (req, res) {
|
|
2108
2132
|
|
2109
2133
|
privateObj.staticServer = async function (req, res, staticPath) {
|
2110
2134
|
if (res.alreadySend) return;
|
2111
|
-
|
2135
|
+
let pathname = url_module.parse(req.url).pathname; /*获取url的值*/
|
2112
2136
|
if (pathname == '/') {
|
2113
2137
|
pathname = '/index.html'; /*默认加载的首页*/
|
2114
2138
|
}
|
2115
2139
|
let fileName = pathname.replace("/", "");
|
2116
2140
|
//获取文件的后缀名
|
2117
|
-
|
2141
|
+
let extname = path.extname(pathname);
|
2118
2142
|
|
2119
2143
|
if (fileName.startsWith("__default_")) {
|
2120
2144
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
@@ -2265,7 +2289,7 @@ M.sseServer = function () {
|
|
2265
2289
|
* ----------------------其他工具函数START--------------------------------------------
|
2266
2290
|
*/
|
2267
2291
|
M.exec = function (comand) {
|
2268
|
-
|
2292
|
+
let promise = new Promise(function (reslove, reject) {
|
2269
2293
|
child_process.exec(comand, function (err, stdout, stderr) {
|
2270
2294
|
if (err || stderr) console.error(err, stderr);
|
2271
2295
|
reslove(stdout);
|
@@ -2276,11 +2300,11 @@ M.exec = function (comand) {
|
|
2276
2300
|
}
|
2277
2301
|
|
2278
2302
|
M.getMyIp = function () {
|
2279
|
-
|
2280
|
-
for (
|
2281
|
-
|
2282
|
-
for (
|
2283
|
-
|
2303
|
+
let interfaces = require('os').networkInterfaces();
|
2304
|
+
for (let devName in interfaces) {
|
2305
|
+
let iface = interfaces[devName];
|
2306
|
+
for (let i = 0; i < iface.length; i++) {
|
2307
|
+
let alias = iface[i];
|
2284
2308
|
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
|
2285
2309
|
return alias.address;
|
2286
2310
|
}
|
@@ -2299,8 +2323,8 @@ M.getMyIp = function () {
|
|
2299
2323
|
*/
|
2300
2324
|
|
2301
2325
|
M.sleep = function (numberMillis) {
|
2302
|
-
|
2303
|
-
|
2326
|
+
let now = new Date();
|
2327
|
+
let exitTime = now.getTime() + numberMillis;
|
2304
2328
|
while (true) {
|
2305
2329
|
now = new Date();
|
2306
2330
|
if (now.getTime() > exitTime)
|
@@ -2436,6 +2460,7 @@ privateObj.staticMime = {
|
|
2436
2460
|
".hdml": "text/x-hdml",
|
2437
2461
|
".hlp": "application/winhlp",
|
2438
2462
|
".hqx": "application/mac-binhex40",
|
2463
|
+
".hex": "text/html",
|
2439
2464
|
".hta": "application/hta",
|
2440
2465
|
".htc": "text/x-component",
|
2441
2466
|
".htm": "text/html",
|
@@ -2651,7 +2676,6 @@ privateObj.staticMime = {
|
|
2651
2676
|
".setreg": "application/set-registration-initiation",
|
2652
2677
|
".sgm": "text/x-sgml",
|
2653
2678
|
".sgml": "text/x-sgml",
|
2654
|
-
".sh": "application/x-sh",
|
2655
2679
|
".shar": "application/x-shar",
|
2656
2680
|
".shtml": "magnus-internal/parsed-html",
|
2657
2681
|
".shw": "application/presentations",
|
@@ -2793,7 +2817,6 @@ privateObj.staticMime = {
|
|
2793
2817
|
".xlt": "application/vnd.ms-excel",
|
2794
2818
|
".xlw": "application/vnd.ms-excel",
|
2795
2819
|
".xm": "audio/x-mod",
|
2796
|
-
".xml": "text/plain",
|
2797
2820
|
".xml": "application/xml",
|
2798
2821
|
".xmz": "audio/x-mod",
|
2799
2822
|
".xof": "x-world/x-vrml",
|
@@ -2833,8 +2856,8 @@ privateObj.staticMime = {
|
|
2833
2856
|
".perl": "text/plain",
|
2834
2857
|
".php": "text/plain",
|
2835
2858
|
".py": "text/plain",
|
2859
|
+
".json5": "text/plain",
|
2836
2860
|
".redis": "text/plain",
|
2837
|
-
".conf": "text/conf",
|
2838
2861
|
".sql": "text/sql",
|
2839
2862
|
".ejs": "text/plain"
|
2840
2863
|
}
|
@@ -2863,7 +2886,7 @@ M.init = function () {
|
|
2863
2886
|
* 下划线命名转为驼峰命名
|
2864
2887
|
*/
|
2865
2888
|
String.prototype.underlineToHump = function () {
|
2866
|
-
|
2889
|
+
let re = /_(\w)/g;
|
2867
2890
|
str = this.replace(re, function ($0, $1) {
|
2868
2891
|
return $1.toUpperCase();
|
2869
2892
|
});
|
@@ -2874,7 +2897,7 @@ M.init = function () {
|
|
2874
2897
|
* 驼峰命名转下划线
|
2875
2898
|
*/
|
2876
2899
|
String.prototype.humpToUnderline = function () {
|
2877
|
-
|
2900
|
+
let re = /_(\w)/g;
|
2878
2901
|
str = this.replace(/([A-Z])/g, "_$1").toLowerCase();
|
2879
2902
|
return str;
|
2880
2903
|
}
|
@@ -2893,7 +2916,7 @@ M.init = function () {
|
|
2893
2916
|
}
|
2894
2917
|
//格式化日期
|
2895
2918
|
Date.prototype.format = function (fmt) {
|
2896
|
-
|
2919
|
+
let o = {
|
2897
2920
|
"M+": this.getMonth() + 1, //月份
|
2898
2921
|
"d+": this.getDate(), //日
|
2899
2922
|
"h+": this.getHours(), //小时
|
@@ -2905,7 +2928,7 @@ M.init = function () {
|
|
2905
2928
|
if (/(y+)/.test(fmt)) {
|
2906
2929
|
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
|
2907
2930
|
}
|
2908
|
-
for (
|
2931
|
+
for (let k in o) {
|
2909
2932
|
if (new RegExp("(" + k + ")").test(fmt)) {
|
2910
2933
|
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
|
2911
2934
|
}
|
package/module/net/TcpServer.js
CHANGED
@@ -57,12 +57,12 @@ class TcpServer {
|
|
57
57
|
|
58
58
|
// 客户端连接关闭
|
59
59
|
client.on('close', function (err) {
|
60
|
-
delete
|
60
|
+
delete TcpServer.socketClientMap[endPoint];
|
61
61
|
TcpServer._EventCallBack["close"]?TcpServer._EventCallBack["close"](client):"";
|
62
62
|
});
|
63
63
|
// 客户端连接错误
|
64
64
|
client.on('error', function (err) {
|
65
|
-
delete
|
65
|
+
delete TcpServer.socketClientMap[endPoint];
|
66
66
|
TcpServer._EventCallBack["error"]?TcpServer._EventCallBack["error"](client):"";
|
67
67
|
});
|
68
68
|
});
|
@@ -85,20 +85,20 @@ class TcpServer {
|
|
85
85
|
//设置关闭时的回调函数
|
86
86
|
this.socketServer.on('close', function () {
|
87
87
|
console.log('sever closed');
|
88
|
-
|
88
|
+
TcpServer.socketClientMap={};
|
89
89
|
});
|
90
90
|
|
91
91
|
//设置出错时的回调函数
|
92
92
|
this.socketServer.on('error', function () {
|
93
93
|
console.log('sever error');
|
94
|
-
|
94
|
+
TcpServer.socketClientMap={};
|
95
95
|
});
|
96
96
|
}
|
97
97
|
|
98
98
|
send(buffer){
|
99
|
-
let clientEndPointList= Object.keys(
|
99
|
+
let clientEndPointList= Object.keys(TcpServer.socketClientMap);
|
100
100
|
for (let i=0;i<clientEndPointList.length;i++){
|
101
|
-
|
101
|
+
TcpServer.socketClientMap[clientEndPointList[i]].write(buffer)
|
102
102
|
}
|
103
103
|
|
104
104
|
}
|
@@ -0,0 +1,109 @@
|
|
1
|
+
import net from "net"
|
2
|
+
import os from 'os'
|
3
|
+
|
4
|
+
class TcpServer {
|
5
|
+
static _EventCallBack={};
|
6
|
+
static socketClientMap={};
|
7
|
+
set(url, callback) {
|
8
|
+
TcpServer._EventCallBack[url]=callback;
|
9
|
+
}
|
10
|
+
constructor() {
|
11
|
+
this.localAddress=this.getIpAddress();
|
12
|
+
}
|
13
|
+
getIpAddress(){
|
14
|
+
/**os.networkInterfaces() 返回一个对象,该对象包含已分配了网络地址的网络接口 */
|
15
|
+
var interfaces = os.networkInterfaces();
|
16
|
+
for (var devName in interfaces) {
|
17
|
+
var iface = interfaces[devName];
|
18
|
+
for (var i = 0; i < iface.length; i++) {
|
19
|
+
var alias = iface[i];
|
20
|
+
if (
|
21
|
+
alias.family === "IPv4" &&
|
22
|
+
alias.address !== "127.0.0.1" &&
|
23
|
+
!alias.internal
|
24
|
+
) {
|
25
|
+
return alias.address;
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
|
32
|
+
listen(port){
|
33
|
+
let that=this;
|
34
|
+
this.localPort=port;
|
35
|
+
this.socketServer = net.createServer(function (client) {
|
36
|
+
let endPoint= client.remoteAddress+":"+client.remotePort;
|
37
|
+
TcpServer.socketClientMap[endPoint]=client;
|
38
|
+
let req={};
|
39
|
+
req.remoteIp=client.remoteAddress;
|
40
|
+
req.remotePort=client.remotePort;
|
41
|
+
TcpServer._EventCallBack['connect']? TcpServer._EventCallBack['connect'](req,null): console.log(endPoint+"connected");
|
42
|
+
|
43
|
+
// 接收客户端的数据
|
44
|
+
client.on('data', function (data) {
|
45
|
+
let req={};
|
46
|
+
req.remoteIp=client.remoteAddress;
|
47
|
+
req.remotePort=client.remotePort;
|
48
|
+
req.params=data;
|
49
|
+
let res={};
|
50
|
+
res.send=function (v){
|
51
|
+
if(Array.isArray(v)){
|
52
|
+
v=new Buffer(v)
|
53
|
+
}
|
54
|
+
client.write(v)
|
55
|
+
}
|
56
|
+
TcpServer._EventCallBack['data'](req,res);
|
57
|
+
});
|
58
|
+
|
59
|
+
// 客户端连接关闭
|
60
|
+
client.on('close', function (err) {
|
61
|
+
delete TcpServer.socketClientMap[endPoint];
|
62
|
+
TcpServer._EventCallBack["close"]?TcpServer._EventCallBack["close"](client):"";
|
63
|
+
});
|
64
|
+
// 客户端连接错误
|
65
|
+
client.on('error', function (err) {
|
66
|
+
delete TcpServer.socketClientMap[endPoint];
|
67
|
+
TcpServer._EventCallBack["error"]?TcpServer._EventCallBack["error"](client):"";
|
68
|
+
});
|
69
|
+
});
|
70
|
+
this.socketServer.listen(
|
71
|
+
{
|
72
|
+
port: port,
|
73
|
+
host: '0.0.0.0',
|
74
|
+
},
|
75
|
+
function () {
|
76
|
+
//console.log('Tcpserver listen listen on '+that.localPort);
|
77
|
+
}
|
78
|
+
);
|
79
|
+
|
80
|
+
//设置监听时的回调函数
|
81
|
+
this.socketServer.on('listening', function () {
|
82
|
+
const { address, port } = that.socketServer.address();
|
83
|
+
console.log('Tcpserver listen on '+port);
|
84
|
+
});
|
85
|
+
|
86
|
+
//设置关闭时的回调函数
|
87
|
+
this.socketServer.on('close', function () {
|
88
|
+
console.log('sever closed');
|
89
|
+
TcpServer.socketClientMap={};
|
90
|
+
});
|
91
|
+
|
92
|
+
//设置出错时的回调函数
|
93
|
+
this.socketServer.on('error', function () {
|
94
|
+
console.log('sever error');
|
95
|
+
TcpServer.socketClientMap={};
|
96
|
+
});
|
97
|
+
}
|
98
|
+
|
99
|
+
send(buffer){
|
100
|
+
let clientEndPointList= Object.keys(TcpServer.socketClientMap);
|
101
|
+
for (let i=0;i<clientEndPointList.length;i++){
|
102
|
+
TcpServer.socketClientMap[clientEndPointList[i]].write(buffer)
|
103
|
+
}
|
104
|
+
|
105
|
+
}
|
106
|
+
|
107
|
+
}
|
108
|
+
|
109
|
+
export default TcpServer;
|
package/package.json
CHANGED