ming_node 3.0.1 → 3.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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