ming_node 2.2.3 → 2.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. package/README.md +1 -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 +19 -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/index.js +99 -28
  14. package/ming_node.md +4 -4
  15. package/module/BaseMapper.js +20 -4
  16. package/module/MemoryDb.js +136 -0
  17. package/module/MiApiCloudClient.js +649 -0
  18. package/package.json +1 -1
  19. package/plugins/BaseGraphqlApi/getGraphqlSchema.js +73 -0
  20. package/plugins/BaseGraphqlApi/getGraphqlSchemaDemo.js +76 -0
  21. package/plugins/BaseGraphqlApi/index.js +18 -0
  22. package/plugins/BaseRestApi/AbstractBaseRestApi.js +59 -0
  23. package/plugins/BaseRestApi/ApiCloudBaseRestApi.js +56 -0
  24. package/plugins/BaseRestApi/FileBaseRestApi.js +62 -0
  25. package/plugins/BaseRestApi/MemoryBaseRestApi.js +50 -0
  26. package/plugins/BaseRestApi/MongoDbBaseRestApi.js +75 -0
  27. package/plugins/BaseRestApi/MysqlBaseRestApi.js +72 -0
  28. package/plugins/BaseRpcApi/AbstractBaseRpcApi.js +72 -0
  29. package/plugins/BaseRpcApi/ApiCloudBaseRpcApi.js +56 -0
  30. package/plugins/BaseRpcApi/FileBaseRpcApi.js +62 -0
  31. package/plugins/BaseRpcApi/MemoryBaseRpcApi.js +50 -0
  32. package/plugins/BaseRpcApi/MongoDbBaseRpcApi.js +75 -0
  33. package/plugins/BaseRpcApi/MysqlBaseRpcApi.js +72 -0
  34. package/utils/common/CollectionUtils.js +28 -0
  35. 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/index.js
13
+ https://unpkg.com/ming_node/MemoryBaseRpcApi.js
14
14
 
15
15
 
16
16
  # ming_node最小环境
@@ -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,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 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);
@@ -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);
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.3
5
+ * Date :2021.12.01
6
+ * version :2.2.5
7
7
  */
8
8
  var http = require('http');
9
9
  var https = require('https');
@@ -32,6 +32,7 @@
32
32
  M.httpProxy = {};// http 代理配置
33
33
  M._sseClientMap=new Map();
34
34
  M._sseHeatTime=3000;
35
+ M._moduleMap=new Map();//模块map
35
36
  M.httpBefore = (d) => {
36
37
  return d
37
38
  }
@@ -47,7 +48,16 @@
47
48
  M.remoteStaticPathEnable = true;
48
49
  //代理服务器配置
49
50
  M.proxyHost = "http://127.0.0.1:8888"
50
- M.proxyHost = ""
51
+ M.proxyHost = "";
52
+
53
+ M.setModule=function (key,module){
54
+ M._moduleMap.set(key,module);
55
+ }
56
+ M.getModule=function (key){
57
+ M._moduleMap.get(key);
58
+ }
59
+
60
+
51
61
  /**
52
62
  * ----------------------客户端START--------------------------------------------
53
63
  */
@@ -657,13 +667,14 @@ M.request.put=M.put;
657
667
  }
658
668
  }
659
669
  M.writeObjToFile(file, d);
670
+ return d_num;
660
671
  }
661
672
 
662
673
  M.updateObjByIdFile = function (file, obj) {
663
674
  var d = M.getObjByFile(file);
664
675
  for (let i = 0; i < d.length; i++) {
665
676
  if (d[i].id == obj.id) {
666
- d.splice(i, 1, obj);
677
+ d.splice(i, 1, Object.assign(d[i],obj));
667
678
  break;
668
679
  }
669
680
  }
@@ -677,17 +688,28 @@ M.request.put=M.put;
677
688
  }
678
689
  }
679
690
  }
680
- M.listAllObjByPropFile = function (file, o) {
681
- let r_list = [];
682
- let o_key = Object.keys(o)[0];
683
- let o_val = o[o_key]
684
- var d = M.getObjByFile(file);
685
- for (let i = 0; i < d.length; i++) {
686
- if (d[i][o_key] == o_val) {
687
- r_list.push(d[i]);
691
+ M.listAllObjByPropFile = function (file, caseObj) {
692
+ var d = M.getObjByFile(file);
693
+ let o_keys = Object.keys(caseObj);
694
+ if (caseObj && o_keys.length>0) {
695
+ let r_list = [];
696
+ let o_vals = Object.values(caseObj);
697
+ for (let i = 0; i < d.length; i++) {
698
+ let s=0;
699
+ for (let j=0;j<o_keys.length;j++){
700
+ if (d[i][o_keys[j]] != o_vals[j]) {
701
+ break
702
+ }
703
+ s++;
704
+ }
705
+ if(s==o_keys.length){
706
+ r_list.push(d[i]);
707
+ }
688
708
  }
709
+ return r_list;
710
+ } else {
711
+ return d;
689
712
  }
690
- return r_list;
691
713
  }
692
714
  /**
693
715
  * 文件型数据库第二层封装
@@ -976,6 +998,7 @@ M.getMySql = function (dbConfig) {
976
998
  timezone: "08:00"
977
999
  }
978
1000
  var Db = {};
1001
+ Db.dbConfig=defaultDbConfig;
979
1002
  console.log("connect mysql", defaultDbConfig)
980
1003
  var pool = mysql.createPool(defaultDbConfig);
981
1004
  Db.pool=pool;
@@ -1209,8 +1232,9 @@ M.getMongoDB = function (dbConfig) {
1209
1232
  }
1210
1233
 
1211
1234
  }
1212
- MingMongoClient.ObjectID=(id)=> new ObjectID(id)
1213
- let Db=MingMongoClient;
1235
+ MingMongoClient.ObjectID=(id)=> new ObjectID(id)
1236
+ let Db=MingMongoClient;
1237
+ Db.dbConfig=Config;
1214
1238
  MingMongoClient.collectionName="test"
1215
1239
  M.mongoDb=Db;
1216
1240
  return Db;
@@ -1358,6 +1382,40 @@ M.failResult=(msg,code,d)=>{
1358
1382
  M.randomStr = function () {
1359
1383
  return (Math.random().toString(36) + new Date().getTime()).slice(2);
1360
1384
  }
1385
+
1386
+ M.urlStringify = function (obj) {
1387
+ if (obj !== null && typeof obj === 'object') {
1388
+ var keys = Object.keys(obj);
1389
+ var len = keys.length;
1390
+ var flast = len - 1;
1391
+ var fields = '';
1392
+ for (var i = 0; i < len; ++i) {
1393
+ var k = keys[i];
1394
+ var v = obj[k];
1395
+ var ks = k + "=";
1396
+ fields += ks + v;
1397
+ if (i < flast)
1398
+ fields += "&";
1399
+ }
1400
+ return fields;
1401
+ }
1402
+ return '';
1403
+ };
1404
+
1405
+ M.urlParse = function (url) {
1406
+ url = url.substr(url.indexOf("?") + 1);
1407
+ var t, n, r, i = url, s = {};
1408
+ t = i.split("&"),
1409
+ r = null,
1410
+ n = null;
1411
+ for (var o in t) {
1412
+ var u = t[o].indexOf("=");
1413
+ u !== -1 && (r = t[o].substr(0, u),
1414
+ n = t[o].substr(u + 1),
1415
+ s[r] = n)
1416
+ }
1417
+ return s
1418
+ };
1361
1419
 
1362
1420
  /**
1363
1421
  * 异常处理钩子
@@ -1663,15 +1721,30 @@ M.failResult=(msg,code,d)=>{
1663
1721
  G._server = callback;
1664
1722
  }
1665
1723
  app.use=function (url,callback){
1666
- if (Array.isArray(url)) {
1667
- url.forEach(u=>{
1668
- let regExp=new RegExp(u)
1669
- G._use[u] = {url,regExp,callback};
1670
- })
1671
- } else {
1672
- let regExp=new RegExp(url)
1673
- G._use[url] = {url,regExp,callback};
1724
+ if(typeof url === 'function' || typeof url === 'object' ){
1725
+ let plugin=url;
1726
+ let args=callback;
1727
+ if(plugin.installed){
1728
+ return app;
1729
+ }
1730
+ if (typeof plugin === 'function') {
1731
+ plugin(app, args);
1732
+ } else {
1733
+ plugin.install(app, args);
1734
+ }
1735
+ plugin.installed = true;
1736
+ }else {
1737
+ if (Array.isArray(url)) {
1738
+ url.forEach(u=>{
1739
+ let regExp=new RegExp(u)
1740
+ G._use[u] = {url,regExp,callback};
1741
+ })
1742
+ } else {
1743
+ let regExp=new RegExp(url)
1744
+ G._use[url] = {url,regExp,callback};
1745
+ }
1674
1746
  }
1747
+ return app;
1675
1748
  }
1676
1749
  /**
1677
1750
  * 注册get请求
@@ -1766,9 +1839,8 @@ M.failResult=(msg,code,d)=>{
1766
1839
  app.set("gloable_exception_handle",(err,req,res)=>{
1767
1840
  console.error(err.stack)
1768
1841
  if (res && !res.alreadySend) {
1769
- res.writeHead(500, { "Content-Type": "text/html;charset='utf-8'" });
1770
- res.write("server err");
1771
- res.end();
1842
+ // res.writeHead(500, { "Content-Type": "text/j;charset='utf-8'" });
1843
+ res.send(M.result(err.message,false,-1));
1772
1844
  }
1773
1845
  })
1774
1846
 
@@ -1812,7 +1884,6 @@ M.failResult=(msg,code,d)=>{
1812
1884
  console.log("listen on port:" + port);
1813
1885
  return server;
1814
1886
  }
1815
-
1816
1887
  return app;
1817
1888
  }
1818
1889
  M["_gloable_exception_handle"]=(err)=>{
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
@@ -1,9 +1,14 @@
1
- const M=require("ming_node")
2
- const Db=M.getMySql({})
1
+ const M=require("../index")
2
+ const Db=M.getMySql({});
3
3
 
4
4
  class BaseMapper {
5
+
6
+ //static BaseMapperMap=new Map();
7
+
5
8
  constructor(tableName) {
6
9
  this.tableName =tableName;
10
+ this.tableSchema=null;
11
+ //BaseMapper.BaseMapperMap.set(tableName,this);
7
12
  }
8
13
 
9
14
  /**
@@ -12,6 +17,7 @@ class BaseMapper {
12
17
  * @returns {Promise<*>}
13
18
  */
14
19
  async insert(obj){
20
+ delete obj.id;
15
21
  let sql= BaseMapper.getInsertObjSql(this.tableName,obj)
16
22
  let r=await Db.doSql(sql);
17
23
  return r;
@@ -52,7 +58,7 @@ class BaseMapper {
52
58
  }
53
59
 
54
60
  /**
55
- *根据条件改
61
+ * 删除
56
62
  * @param caseStr
57
63
  * @returns {Promise<*>}
58
64
  */
@@ -139,7 +145,7 @@ class BaseMapper {
139
145
  let dataList=await Db.doSql(`SELECT ${queryColumn} FROM ${this.tableName} where ${whereCase} order by ${order} LIMIT ${start},${num}`)
140
146
  let totalR=await Db.doSql(`SELECT count(1) c FROM ${this.tableName} where ${whereCase}`)
141
147
  let total=totalR[0].c
142
- return {dataList,total};
148
+ return {rows:dataList,total};
143
149
  }
144
150
 
145
151
  /**
@@ -213,6 +219,14 @@ class BaseMapper {
213
219
  return rootList;
214
220
  }
215
221
 
222
+ async getTableSchema(){
223
+ if(this.tableSchema==null){
224
+ let dataBaseName=Db.dbConfig.database;
225
+ let sql=`select COLUMN_NAME,COLUMN_TYPE,COLUMN_COMMENT from information_schema.columns where table_schema ='${dataBaseName}' and table_name = '${this.tableName}';`
226
+ let tableSchema=await Db.doSql(sql);
227
+ return tableSchema;
228
+ }
229
+ }
216
230
 
217
231
 
218
232
  static getColumn(columns){
@@ -289,6 +303,8 @@ class BaseMapper {
289
303
  return sql;
290
304
  }
291
305
 
306
+
307
+
292
308
  }
293
309
 
294
310
 
@@ -0,0 +1,136 @@
1
+ /**
2
+ * File : MemoryDb.js
3
+ * By : Minglie
4
+ * QQ: 934031452
5
+ * Date :2021.09.14
6
+ * rem : 内存数据库
7
+ */
8
+
9
+ const M=require("../index");
10
+
11
+ class MemoryDb{
12
+
13
+ constructor(tableName) {
14
+ this.tableName=tableName;
15
+ this.dataList=[]
16
+ }
17
+
18
+ /**
19
+ * 单个加
20
+ * @param obj
21
+ * @returns {Promise<*>}
22
+ */
23
+ async add(obj){
24
+ obj.id = M.randomStr();
25
+ this.dataList=[...this.dataList,obj];
26
+ return obj;
27
+ }
28
+
29
+ async update(obj){
30
+ for (let i = 0; i < this.dataList.length; i++) {
31
+ if (this.dataList[i].id == obj.id) {
32
+ this.dataList[i]=obj;
33
+ return
34
+ }
35
+ }
36
+ }
37
+
38
+ listAll(caseObj){
39
+ let o_keys = Object.keys(caseObj);
40
+ if (caseObj && o_keys.length>0) {
41
+ let r_list = [];
42
+ let o_vals = Object.values(caseObj);
43
+ var d = this.dataList;
44
+ for (let i = 0; i < d.length; i++) {
45
+ let s=0;
46
+ for (let j=0;j<o_keys.length;j++){
47
+ if (d[i][o_keys[j]] != o_vals[j]) {
48
+ break
49
+ }
50
+ s++;
51
+ }
52
+ if(s==o_keys.length){
53
+ r_list.push(d[i]);
54
+ }
55
+ }
56
+ return r_list;
57
+ } else {
58
+ return this.dataList;
59
+ }
60
+ }
61
+
62
+
63
+ listByPage(startPage=0, limit=10, caseObj) {
64
+ startPage=Number.parseInt(startPage);
65
+ limit=Number.parseInt(limit);
66
+ if (startPage <= 0) startPage = 1;
67
+ let rows;
68
+ if (caseObj) {
69
+ rows = this.listAll(caseObj);
70
+ } else {
71
+ rows = this.listAll();
72
+ }
73
+ let total = rows.length;
74
+ rows=JSON.parse(JSON.stringify(rows))
75
+ rows = rows.splice((startPage - 1) * limit, limit)
76
+ return {rows, total}
77
+ }
78
+
79
+
80
+ deleteAll(o) {
81
+ if (o) {
82
+ let r_list = [];
83
+ let o_keys = Object.keys(o);
84
+ let o_vals = Object.values(o)
85
+ var d = this.dataList;
86
+ let delete_index=[]
87
+ for (let i = 0; i < d.length; i++) {
88
+ let s=0;
89
+ for (let j=0;j<o_keys.length;j++){
90
+ if (d[i][o_keys[j]] != o_vals[j]) {
91
+ break
92
+ }
93
+ s++;
94
+ }
95
+ if(s==o_keys.length){
96
+ delete_index.push(i)
97
+ }
98
+ }
99
+ for (let i = 0; i < d.length; i++) {
100
+ if(!delete_index.includes(i)){
101
+ r_list.push(d[i])
102
+ }
103
+ }
104
+ this.dataList=r_list;
105
+ return delete_index.length;
106
+ } else {
107
+ let length=this.dataList.length;
108
+ this.dataList=[];
109
+ return length;
110
+ }
111
+ }
112
+
113
+ getById(id) {
114
+ var d = this.dataList;
115
+ for (let i = 0; i < d.length; i++) {
116
+ if(d[i].id==id){
117
+ return d[i];
118
+ }
119
+ }
120
+ return null;
121
+ }
122
+
123
+ deleteById(id) {
124
+ var d = this.dataList;
125
+ for (let i = 0; i < d.length; i++) {
126
+ if(d[i].id==id){
127
+ this.dataList.splice(i, 1);
128
+ return id;
129
+ }
130
+ }
131
+ return 0;
132
+ }
133
+ }
134
+
135
+
136
+ module.exports = MemoryDb;