ming_node 2.2.2 → 2.2.7

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.
Files changed (38) hide show
  1. package/README.md +11 -1
  2. package/beforeTest/ApiCloudBaseRpcApiTest.js +17 -0
  3. package/beforeTest/FileBaseRpcApiTest.js +8 -0
  4. package/beforeTest/MemorDbTest.js +16 -0
  5. package/beforeTest/MemoryBaseRestApiTest.js +8 -0
  6. package/beforeTest/MemoryBaseRpcApiTest.js +8 -0
  7. package/beforeTest/MiApiCloudClientTest.js +16 -0
  8. package/beforeTest/MongoDbBaseRestApiTest.js +22 -0
  9. package/beforeTest/MongoDbBaseRpcApiTest.js +19 -0
  10. package/beforeTest/MySqlBaseRestApiTest.js +13 -0
  11. package/beforeTest/MysqlBaseRpcApiTest.js +18 -0
  12. package/beforeTest/graphql_test.js +12 -0
  13. package/beforeTest/installPluginTest.js +10 -0
  14. package/beforeTest/sseserver.js +44 -0
  15. package/beforeTest/static/ssetest.html +21 -0
  16. package/index.js +198 -44
  17. package/ming_node.md +4 -4
  18. package/module/BaseMapper.js +90 -35
  19. package/module/MemoryDb.js +136 -0
  20. package/module/MiApiCloudClient.js +649 -0
  21. package/package.json +1 -1
  22. package/plugins/BaseGraphqlApi/getGraphqlSchema.js +145 -0
  23. package/plugins/BaseGraphqlApi/getGraphqlSchemaDemo.js +76 -0
  24. package/plugins/BaseGraphqlApi/index.js +23 -0
  25. package/plugins/BaseRestApi/AbstractBaseRestApi.js +59 -0
  26. package/plugins/BaseRestApi/ApiCloudBaseRestApi.js +56 -0
  27. package/plugins/BaseRestApi/FileBaseRestApi.js +62 -0
  28. package/plugins/BaseRestApi/MemoryBaseRestApi.js +50 -0
  29. package/plugins/BaseRestApi/MongoDbBaseRestApi.js +75 -0
  30. package/plugins/BaseRestApi/MysqlBaseRestApi.js +72 -0
  31. package/plugins/BaseRpcApi/AbstractBaseRpcApi.js +72 -0
  32. package/plugins/BaseRpcApi/ApiCloudBaseRpcApi.js +57 -0
  33. package/plugins/BaseRpcApi/FileBaseRpcApi.js +62 -0
  34. package/plugins/BaseRpcApi/MemoryBaseRpcApi.js +50 -0
  35. package/plugins/BaseRpcApi/MongoDbBaseRpcApi.js +75 -0
  36. package/plugins/BaseRpcApi/MysqlBaseRpcApi.js +72 -0
  37. package/utils/common/CollectionUtils.js +28 -0
  38. package/beforeTest/t1.js +0 -18
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  ```
11
11
  # cdn
12
12
 
13
- https://unpkg.com/ming_node@2.2.2/index.js
13
+ https://unpkg.com/ming_node/index.js
14
14
 
15
15
 
16
16
  # ming_node最小环境
@@ -190,6 +190,16 @@ async function main(){
190
190
 
191
191
  ```
192
192
 
193
+ # Rpc风格,服务插件
194
+ [ming_node api插件.yuque](https://www.yuque.com/docs/share/f4444345-ea5b-4f3d-b0c7-ab267e901e81)
195
+ ```js
196
+ var M=require("ming_node");
197
+ const Api= require("ming_node/plugins/BaseRpcApi/MemoryBaseRpcApi");
198
+ let api = new Api({tableName:"ming",generateTime:true})
199
+ var app=M.server();
200
+ app.listen(8888);
201
+ app.use(api);
202
+ ```
193
203
 
194
204
  # 基于ming_node 的 ming_api_mock
195
205
 
@@ -0,0 +1,17 @@
1
+ var M=require("../index");
2
+ const ApiCloudBaseRpcApi= require("../plugins/BaseRpcApi/ApiCloudBaseRpcApi");
3
+ const MiApiCloudClient=require("../module/MiApiCloudClient");
4
+ const apiCloudClient = new MiApiCloudClient("A6032931027980", "FF279F8E-8B09-5F1A-1036-F6AE53F3538D");
5
+ let apiCloudBaseRpcApi = new ApiCloudBaseRpcApi(
6
+ {
7
+ prefix:"ming",
8
+ tableName:"ming",
9
+ apiCloudClient
10
+ }
11
+ )
12
+
13
+ var app=M.server();
14
+
15
+ app.listen(8888);
16
+
17
+ app.use(apiCloudBaseRpcApi);
@@ -0,0 +1,8 @@
1
+ var M=require("../index");
2
+ const FileBaseRpcApi= require("../plugins/BaseRpcApi/FileBaseRpcApi");
3
+
4
+ let fileBaseRpcApi = new FileBaseRpcApi({prefix:"ming", tableName:"a.json",generateTime:true})
5
+ var app=M.server();
6
+ app.listen(8888);
7
+
8
+ app.use(fileBaseRpcApi);
@@ -0,0 +1,16 @@
1
+ MemoryDb=require("../module/MemoryDb")
2
+
3
+ db= new MemoryDb()
4
+
5
+ db.add({
6
+ name:"zs"
7
+ })
8
+
9
+ console.log(db.listByPage())
10
+
11
+
12
+ db.add({
13
+ name:"ls"
14
+ })
15
+
16
+ console.log(db.listByPage())
@@ -0,0 +1,8 @@
1
+ var M=require("../index");
2
+ const MemoryBaseRestApi= require("../plugins/BaseRestApi/MemoryBaseRestApi");
3
+
4
+ let memoryBaseRestApi = new MemoryBaseRestApi({tableName:"ming",generateTime:true})
5
+ var app=M.server();
6
+ app.listen(8888);
7
+
8
+ app.use(memoryBaseRestApi);
@@ -0,0 +1,8 @@
1
+ var M=require("../index");
2
+ const MemoryBaseRpcApi= require("../plugins/BaseRpcApi/MemoryBaseRpcApi");
3
+
4
+ let memoryBaseRpcApi = new MemoryBaseRpcApi({tableName:"ming",generateTime:true})
5
+ var app=M.server();
6
+ app.listen(8888);
7
+
8
+ app.use(memoryBaseRpcApi);
@@ -0,0 +1,16 @@
1
+ const MiApiCloudClient=require("../module/MiApiCloudClient")
2
+
3
+
4
+ M.MiApiCloudClient = new MiApiCloudClient("A6032931027980", "FF279F8E-8B09-5F1A-1036-F6AE53F3538D").tableClient("mi_user");
5
+
6
+
7
+ mi_resource.list({},null,null,"sort").then(d => {
8
+ let result = { rows: d }
9
+ console.log(result)
10
+ })
11
+
12
+ // mi_resource.add({
13
+ // username:"minglie2234"
14
+ // }).then(d=>{
15
+ // console.log(d)
16
+ // })
@@ -0,0 +1,22 @@
1
+ var M=require("../index");
2
+
3
+
4
+ Db= M.getMongoDB({
5
+ dbUrl: "mongodb://root:123456@localhost:27017/?authMechanism=SCRAM-SHA-1&authSource=miapi",
6
+ dbName:"miapi"
7
+ })
8
+
9
+
10
+
11
+ const MongoDbBaseRestApi= require("../plugins/BaseRestApi/MongoDbBaseRestApi");
12
+
13
+
14
+
15
+ let mongoDbBaseRestApi = new MongoDbBaseRestApi({tableName:"test",prefix:"ming", generateTime:true})
16
+ var app=M.server();
17
+ app.listen(8888);
18
+
19
+ app.use(mongoDbBaseRestApi);
20
+
21
+
22
+ console.log(M._globle_plugin)
@@ -0,0 +1,19 @@
1
+ var M=require("../index");
2
+
3
+
4
+ Db= M.getMongoDB({
5
+ dbUrl: "mongodb://root:123456@localhost:27017/?authMechanism=SCRAM-SHA-1&authSource=miapi",
6
+ dbName:"miapi"
7
+ })
8
+
9
+
10
+
11
+ const MongoDbBaseRpcApi= require("../plugins/BaseRpcApi/MongoDbBaseRpcApi");
12
+
13
+
14
+
15
+ let mongoDbBaseRpcApi = new MongoDbBaseRpcApi({tableName:"test",prefix:"ming", generateTime:true})
16
+ var app=M.server();
17
+ app.listen(8888);
18
+
19
+ app.use(mongoDbBaseRpcApi);
@@ -0,0 +1,13 @@
1
+ var M=require("../index");
2
+ const MysqlBaseRestApi= require("../plugins/BaseRestApi/MysqlBaseRestApi");
3
+
4
+ M.getMySql({
5
+ database:"miapi"
6
+ })
7
+
8
+
9
+ let mysqlBaseRestApi = new MysqlBaseRestApi({tableName:"ming",generateTime:true})
10
+ var app=M.server();
11
+ app.listen(8888);
12
+
13
+ app.use(mysqlBaseRestApi);
@@ -0,0 +1,18 @@
1
+ var M=require("../index");
2
+
3
+
4
+ M.getMySql({
5
+ database:"miapi"
6
+ })
7
+
8
+
9
+
10
+ const MysqlBaseRpcApi= require("../plugins/BaseRpcApi/MysqlBaseRpcApi");
11
+
12
+
13
+
14
+ let mysqlBaseRpcApi = new MysqlBaseRpcApi({tableName:"ming",generateTime:true})
15
+ var app=M.server();
16
+ app.listen(8888);
17
+
18
+ app.use(mysqlBaseRpcApi);
@@ -0,0 +1,12 @@
1
+ var M = require('../index');
2
+ var BaseMapper=require("../module/BaseMapper")
3
+ var Db=M.getMySql({
4
+ "database" : "miapi"
5
+ })
6
+ let dbBaseMapper= new BaseMapper("person");
7
+ const BaseGraphqlApi= require("../plugins/BaseGraphqlApi/index");
8
+ let baseGraphqlApi = new BaseGraphqlApi({prefix:"person", dbBaseMapper});
9
+
10
+ var app = M.server()
11
+ app.listen(4000)
12
+ app.use(baseGraphqlApi);
@@ -0,0 +1,10 @@
1
+ var M=require("ming_node");
2
+
3
+ var app=M.server();
4
+ app.listen(8888);
5
+
6
+ app.installPlugin("http://localhost:4444/OssWebApi.js",{
7
+ name:"我是插件构造方法参数"
8
+ },{
9
+ name:"我是插件构造方法附加参数"
10
+ });
@@ -0,0 +1,44 @@
1
+ var M=require("../index");
2
+
3
+ var app=M.server();
4
+ app.listen(8888);
5
+
6
+ //SSE 心跳周期
7
+ M._sseHeatTime=3000;
8
+
9
+
10
+ sseApp=M.sseServer()
11
+ //sseApp.listen(2000)
12
+ app.get("/sseServer",sseApp)
13
+
14
+ //sse 连接成功钩子
15
+ app.set("sse_connection",(clientId)=>{
16
+ console.log(clientId+"连接成功")
17
+ //返回false 说明不让连接
18
+ return true;
19
+ })
20
+
21
+ //sse 断开钩子
22
+ app.set("sse_disconnect",(clientId)=>{
23
+ console.log(clientId+"断开连接")
24
+ })
25
+
26
+ //查询所有sse客户端
27
+ app.get("allSseClient",(clientId)=>{
28
+ res.send(M._sseClientMap.keys());
29
+ })
30
+
31
+ //广播方式发送
32
+ app.get("/sseSend1",(req,res)=>{
33
+ console.log(req.params);
34
+ sseApp.send(req.params);
35
+ res.send("ok");
36
+ })
37
+
38
+
39
+ //私信发送
40
+ app.get("/sseSend2",(req,res)=>{
41
+ console.log(req.params);
42
+ sseApp.send(req.params,"clientId");
43
+ res.send("ok");
44
+ })
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>xxx</title>
6
+ <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
7
+ <script src="https://minglie.github.io/js/M_mock.js"></script>
8
+ </head>
9
+ <body>
10
+ <h1>获取服务端更新数据</h1>
11
+ <div id="result"></div>
12
+ <script>
13
+
14
+ M.EventSource('http://localhost:8888/sseServer?clientId='+M.randomStr(),function(e){
15
+ console.log(e.data)
16
+ })
17
+
18
+ </script>
19
+
20
+ </body>
21
+ </html>
package/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
- * File : index.js
2
+ * File : MemoryBaseRpcApi.js
3
3
  * By : Minglie
4
4
  * QQ: 934031452
5
- * Date :2021.09.14
6
- * version :2.2.2
5
+ * Date :2021.12.01
6
+ * version :2.2.7
7
7
  */
8
8
  var http = require('http');
9
9
  var https = require('https');
@@ -30,6 +30,9 @@
30
30
  M.database_path = "./M_database.json";//文件型数据库路径
31
31
  M.log_display_time = true;//日志是否显示当前时间
32
32
  M.httpProxy = {};// http 代理配置
33
+ M._sseClientMap=new Map();
34
+ M._sseHeatTime=3000;
35
+ M._moduleMap=new Map();//模块map
33
36
  M.httpBefore = (d) => {
34
37
  return d
35
38
  }
@@ -39,13 +42,26 @@
39
42
  M._globle_cacheMap = {}
40
43
  //全局对象缓存
41
44
  M._globle_lib_cacheMap={}
45
+ //全局插件地址缓存
46
+ M._globle_plugin_url_cacheMap={};
47
+ //全局插件
48
+ M._globle_plugin=new Set();
42
49
  M._node_lib_path=process.env.NODE_PATH;
43
50
  //远程静态资源路径
44
51
  M.remoteStaticPath = "https://minglie.gitee.io/mingpage/static";
45
52
  M.remoteStaticPathEnable = true;
46
53
  //代理服务器配置
47
54
  M.proxyHost = "http://127.0.0.1:8888"
48
- M.proxyHost = ""
55
+ M.proxyHost = "";
56
+
57
+ M.setModule=function (key,module){
58
+ M._moduleMap.set(key,module);
59
+ }
60
+ M.getModule=function (key){
61
+ M._moduleMap.get(key);
62
+ }
63
+
64
+
49
65
  /**
50
66
  * ----------------------客户端START--------------------------------------------
51
67
  */
@@ -655,13 +671,14 @@ M.request.put=M.put;
655
671
  }
656
672
  }
657
673
  M.writeObjToFile(file, d);
674
+ return d_num;
658
675
  }
659
676
 
660
677
  M.updateObjByIdFile = function (file, obj) {
661
678
  var d = M.getObjByFile(file);
662
679
  for (let i = 0; i < d.length; i++) {
663
680
  if (d[i].id == obj.id) {
664
- d.splice(i, 1, obj);
681
+ d.splice(i, 1, Object.assign(d[i],obj));
665
682
  break;
666
683
  }
667
684
  }
@@ -675,17 +692,28 @@ M.request.put=M.put;
675
692
  }
676
693
  }
677
694
  }
678
- M.listAllObjByPropFile = function (file, o) {
679
- let r_list = [];
680
- let o_key = Object.keys(o)[0];
681
- let o_val = o[o_key]
682
- var d = M.getObjByFile(file);
683
- for (let i = 0; i < d.length; i++) {
684
- if (d[i][o_key] == o_val) {
685
- r_list.push(d[i]);
695
+ M.listAllObjByPropFile = function (file, caseObj) {
696
+ var d = M.getObjByFile(file);
697
+ let o_keys = Object.keys(caseObj);
698
+ if (caseObj && o_keys.length>0) {
699
+ let r_list = [];
700
+ let o_vals = Object.values(caseObj);
701
+ for (let i = 0; i < d.length; i++) {
702
+ let s=0;
703
+ for (let j=0;j<o_keys.length;j++){
704
+ if (d[i][o_keys[j]] != o_vals[j]) {
705
+ break
706
+ }
707
+ s++;
708
+ }
709
+ if(s==o_keys.length){
710
+ r_list.push(d[i]);
711
+ }
686
712
  }
713
+ return r_list;
714
+ } else {
715
+ return d;
687
716
  }
688
- return r_list;
689
717
  }
690
718
  /**
691
719
  * 文件型数据库第二层封装
@@ -974,6 +1002,7 @@ M.getMySql = function (dbConfig) {
974
1002
  timezone: "08:00"
975
1003
  }
976
1004
  var Db = {};
1005
+ Db.dbConfig=defaultDbConfig;
977
1006
  console.log("connect mysql", defaultDbConfig)
978
1007
  var pool = mysql.createPool(defaultDbConfig);
979
1008
  Db.pool=pool;
@@ -1207,8 +1236,9 @@ M.getMongoDB = function (dbConfig) {
1207
1236
  }
1208
1237
 
1209
1238
  }
1210
- MingMongoClient.ObjectID=(id)=> new ObjectID(id)
1211
- let Db=MingMongoClient;
1239
+ MingMongoClient.ObjectID=(id)=> new ObjectID(id)
1240
+ let Db=MingMongoClient;
1241
+ Db.dbConfig=Config;
1212
1242
  MingMongoClient.collectionName="test"
1213
1243
  M.mongoDb=Db;
1214
1244
  return Db;
@@ -1356,6 +1386,40 @@ M.failResult=(msg,code,d)=>{
1356
1386
  M.randomStr = function () {
1357
1387
  return (Math.random().toString(36) + new Date().getTime()).slice(2);
1358
1388
  }
1389
+
1390
+ M.urlStringify = function (obj) {
1391
+ if (obj !== null && typeof obj === 'object') {
1392
+ var keys = Object.keys(obj);
1393
+ var len = keys.length;
1394
+ var flast = len - 1;
1395
+ var fields = '';
1396
+ for (var i = 0; i < len; ++i) {
1397
+ var k = keys[i];
1398
+ var v = obj[k];
1399
+ var ks = k + "=";
1400
+ fields += ks + v;
1401
+ if (i < flast)
1402
+ fields += "&";
1403
+ }
1404
+ return fields;
1405
+ }
1406
+ return '';
1407
+ };
1408
+
1409
+ M.urlParse = function (url) {
1410
+ url = url.substr(url.indexOf("?") + 1);
1411
+ var t, n, r, i = url, s = {};
1412
+ t = i.split("&"),
1413
+ r = null,
1414
+ n = null;
1415
+ for (var o in t) {
1416
+ var u = t[o].indexOf("=");
1417
+ u !== -1 && (r = t[o].substr(0, u),
1418
+ n = t[o].substr(u + 1),
1419
+ s[r] = n)
1420
+ }
1421
+ return s
1422
+ };
1359
1423
 
1360
1424
  /**
1361
1425
  * 异常处理钩子
@@ -1661,16 +1725,43 @@ M.failResult=(msg,code,d)=>{
1661
1725
  G._server = callback;
1662
1726
  }
1663
1727
  app.use=function (url,callback){
1664
- if (Array.isArray(url)) {
1665
- url.forEach(u=>{
1666
- let regExp=new RegExp(u)
1667
- G._use[u] = {url,regExp,callback};
1668
- })
1669
- } else {
1670
- let regExp=new RegExp(url)
1671
- G._use[url] = {url,regExp,callback};
1728
+ if(typeof url === 'function' || typeof url === 'object' ){
1729
+ let plugin=url;
1730
+ let args=callback;
1731
+ if(plugin.installed){
1732
+ return app;
1733
+ }
1734
+ if (typeof plugin === 'function') {
1735
+ plugin(app, args);
1736
+ } else {
1737
+ plugin.install(app, args);
1738
+ }
1739
+ M._globle_plugin.add(plugin);
1740
+ plugin.installed = true;
1741
+ }else {
1742
+ if (Array.isArray(url)) {
1743
+ url.forEach(u=>{
1744
+ let regExp=new RegExp(u)
1745
+ G._use[u] = {url,regExp,callback};
1746
+ })
1747
+ } else {
1748
+ let regExp=new RegExp(url)
1749
+ G._use[url] = {url,regExp,callback};
1750
+ }
1751
+ }
1752
+ return app;
1753
+ }
1754
+
1755
+ app.installPlugin=async function (pluginUrl,constructorParams,pluginParams){
1756
+ if(M._globle_plugin_url_cacheMap[pluginUrl]){
1757
+ return
1672
1758
  }
1759
+ M._globle_plugin_url_cacheMap[pluginUrl]=pluginUrl;
1760
+ const Plugin= await M.require(pluginUrl);
1761
+ const plugin= new Plugin(constructorParams);
1762
+ app.use(plugin,pluginParams)
1673
1763
  }
1764
+
1674
1765
  /**
1675
1766
  * 注册get请求
1676
1767
  */
@@ -1764,9 +1855,8 @@ M.failResult=(msg,code,d)=>{
1764
1855
  app.set("gloable_exception_handle",(err,req,res)=>{
1765
1856
  console.error(err.stack)
1766
1857
  if (res && !res.alreadySend) {
1767
- res.writeHead(500, { "Content-Type": "text/html;charset='utf-8'" });
1768
- res.write("server err");
1769
- res.end();
1858
+ // res.writeHead(500, { "Content-Type": "text/j;charset='utf-8'" });
1859
+ res.send(M.result(err.message,false,-1));
1770
1860
  }
1771
1861
  })
1772
1862
 
@@ -1810,7 +1900,6 @@ M.failResult=(msg,code,d)=>{
1810
1900
  console.log("listen on port:" + port);
1811
1901
  return server;
1812
1902
  }
1813
-
1814
1903
  return app;
1815
1904
  }
1816
1905
  M["_gloable_exception_handle"]=(err)=>{
@@ -1963,31 +2052,96 @@ privateObj.dealUseServer = async function (req, res) {
1963
2052
 
1964
2053
  /*SSE SERVER */
1965
2054
  M.sseServer = function () {
2055
+ //sse 心跳
2056
+ function headBeat(){
2057
+ try {
2058
+ let clientIdList= Array.from(M._sseClientMap.keys());
2059
+ for (let i=0;i<clientIdList.length;i++){
2060
+ let clientId= clientIdList[i];
2061
+ let res= M._sseClientMap.get(clientId).res;
2062
+ let r= res.write(': \n\n');
2063
+ if(!r){
2064
+ M._sseClientMap.delete(clientId);
2065
+ M["_sse_disconnect"](clientId);
2066
+ }
2067
+ }
2068
+ }catch (e){
2069
+ console.error(e);
2070
+ }
2071
+ }
2072
+
2073
+ M["_sse_connection"]=(clientId)=>{
2074
+ console.log(clientId+" connection")
2075
+ }
2076
+
2077
+ M["_sse_disconnect"]=(clientId)=>{
2078
+ console.log(clientId+" disconnect")
2079
+ }
2080
+
2081
+ M["_sse_send"]=(clientId,msg)=>{
2082
+ // console.log("sse_send",clientId,msg)
2083
+ }
2084
+
2085
+ event.on('sseSendMsg', function (sendData,clientId,eventName="slide",id=+new Date()) {
2086
+ let sendObj={event:eventName,id:id,data:JSON.stringify(sendData),retry:10000}
2087
+ if(!clientId){
2088
+ let clientIdList= Array.from(M._sseClientMap.keys())
2089
+ for (let i=0;i<clientIdList.length;i++){
2090
+ let clientId= clientIdList[i];
2091
+ let res=M._sseClientMap.get(clientId)?M._sseClientMap.get(clientId).res:null;
2092
+ if(res==null){
2093
+ continue;
2094
+ }
2095
+ res.write(`event: ${sendObj.event}\n`); // 事件类型
2096
+ res.write(`id: ${sendObj.id}\n`); // 消息 ID
2097
+ res.write(`data: ${sendObj.data}\n`); // 消息数据
2098
+ res.write(`retry: ${sendObj.retry}\n`); // 重连时间
2099
+ res.write('\n\n'); // 消息结束
2100
+ }
2101
+ }else {
2102
+ let res=M._sseClientMap.get(clientId)?M._sseClientMap.get(clientId).res:null;
2103
+ if(res==null){
2104
+ return
2105
+ }
2106
+ res.write(`event: ${sendObj.event}\n`); // 事件类型
2107
+ res.write(`id: ${sendObj.id}\n`); // 消息 ID
2108
+ res.write(`data: ${sendObj.data}\n`); // 消息数据
2109
+ res.write(`retry: ${sendObj.retry}\n`); // 重连时间
2110
+ res.write('\n\n'); // 消息结束
2111
+ }
2112
+ M["_sse_send"](clientId,sendObj);
2113
+ })
2114
+ setInterval(() => {
2115
+ headBeat();
2116
+ }, M._sseHeatTime);
2117
+
1966
2118
  let app = function (req, res) {
1967
- console.log("SSEServer connect success")
2119
+ headBeat();
2120
+ let clientId=req.params.clientId;
2121
+ let connectionRes= M["_sse_connection"](clientId);
2122
+ if(connectionRes==false){
2123
+ return;
2124
+ }
2125
+ M._sseClientMap.set(clientId,{res});
1968
2126
  res.writeHead(200, {
1969
2127
  'Content-Type': 'text/event-stream',
1970
2128
  'Cache-Control': 'no-cache',
1971
2129
  'Connection': 'keep-alive',
1972
2130
  'Access-Control-Allow-Origin': '*',
1973
2131
  });
1974
- event.removeAllListeners("sseSendMsg")
1975
- event.on('sseSendMsg', function (r) {
1976
- res.write('event: slide\n'); // 事件类型
1977
- res.write(`id: ${+new Date()}\n`); // 消息 ID
1978
- res.write(`data: ${r}\n`); // 消息数据
1979
- res.write('retry: 10000\n'); // 重连时间
1980
- res.write('\n\n'); // 消息结束
1981
- })
1982
- // 发送注释保持长连接
1983
- setInterval(() => {
1984
- res.write(': \n\n');
1985
- }, 12000);
1986
-
1987
2132
  };
1988
- app.send = function (msg) {
1989
- event.emit('sseSendMsg', msg);
2133
+ app.send = function (msg,clientId,eventName,id) {
2134
+ event.emit('sseSendMsg', msg,clientId,eventName,id);
1990
2135
  }
2136
+
2137
+ app.call = function (eventName,msg,clientId,id) {
2138
+ event.emit('sseSendMsg', msg,clientId,eventName,id);
2139
+ }
2140
+
2141
+ app.set = function (k, v) {
2142
+ M["_" + k] = v;
2143
+ }
2144
+
1991
2145
  app.listen = function (port) {
1992
2146
  let serverObj = http.createServer(app).listen(port);
1993
2147
  app.serverObj = serverObj;
package/ming_node.md CHANGED
@@ -1001,7 +1001,7 @@ console.log(new Date().format("yyyy-MM-dd"))
1001
1001
  在含有static文件夹的目录执行下面命令,static便作为web根目录
1002
1002
  ```bash
1003
1003
  #node
1004
- curl https://minglie.github.io/js/index.js > index.js && node index.js
1004
+ curl https://minglie.github.io/js/MemoryBaseRpcApi.js > MemoryBaseRpcApi.js && node MemoryBaseRpcApi.js
1005
1005
  #python
1006
1006
  curl https://minglie.github.io/python/index.py > index.py && python index.py
1007
1007
 
@@ -1009,12 +1009,12 @@ curl https://minglie.github.io/python/index.py > index.py && python index.py
1009
1009
  git clone https://github.com/minglie/ming_mockServer.git && cd ming_mockServer && npm i && npm run start
1010
1010
 
1011
1011
  #curl启动ming_mockServer0
1012
- curl https://minglie.gitee.io/mingpage/static/js/ming_mockServer0.js > index.js && node index.js
1012
+ curl https://minglie.gitee.io/mingpage/static/js/ming_mockServer0.js > MemoryBaseRpcApi.js && node MemoryBaseRpcApi.js
1013
1013
 
1014
1014
  ```
1015
1015
  ## 当前目录静态页
1016
1016
  ```javascript
1017
- curl https://minglie.gitee.io/mingpage/static/js/index_cur.js > index.js && node index.js
1017
+ curl https://minglie.gitee.io/mingpage/static/js/index_cur.js > MemoryBaseRpcApi.js && node MemoryBaseRpcApi.js
1018
1018
  ```
1019
1019
  ```javascript
1020
1020
  +async function(){
@@ -1082,7 +1082,7 @@ app.post("/axios", async (req, res) => {
1082
1082
  ## 写web接口最快捷的方式ming_share_edit
1083
1083
  运行脚本, 访问 [http://localhost:8888/](http://localhost:8888/)
1084
1084
  ```bash
1085
- curl https://minglie.gitee.io/mi/i2.js > index.js && node index.js
1085
+ curl https://minglie.gitee.io/mi/i2.js > MemoryBaseRpcApi.js && node MemoryBaseRpcApi.js
1086
1086
  ```
1087
1087
  ![image.png](https://ming-bucket-01.oss-cn-beijing.aliyuncs.com/yuque/1591515706715-62d3b6f6-f113-497f-a532-63792180cd09.png#align=left&display=inline&height=506&margin=%5Bobject%20Object%5D&name=image.png&originHeight=506&originWidth=720&size=65942&status=done&style=none&width=720)
1088
1088
  ## ming_api_mock