Преглед изворни кода

feat: mongoose 多客户端

qinlaiqiao пре 4 година
родитељ
комит
d7f06caa6e
6 измењених фајлова са 274 додато и 21 уклоњено
  1. 207 2
      package-lock.json
  2. 3 0
      package.json
  3. 18 7
      src/apis/config/config.default.ts
  4. 18 6
      src/apis/service/base.ts
  5. 0 6
      src/apis/service/user.ts
  6. 28 0
      src/apis/socket/hello.ts

+ 207 - 2
package-lock.json

@@ -1720,6 +1720,17 @@
         "mkdirp": "^0.5.1"
       }
     },
+    "@midwayjs/socketio": {
+      "version": "2.13.4",
+      "resolved": "http://192.168.1.90:4873/@midwayjs%2fsocketio/-/socketio-2.13.4.tgz",
+      "integrity": "sha1-XOUSWuXxbiUYScI5/Y0jCm3TJq0=",
+      "requires": {
+        "@midwayjs/core": "^2.13.4",
+        "@midwayjs/logger": "^2.13.0",
+        "socket.io": "^4.0.0",
+        "socket.io-redis": "^6.1.0"
+      }
+    },
     "@midwayjs/view": {
       "version": "2.13.4",
       "resolved": "http://192.168.1.90:4873/@midwayjs%2fview/-/view-2.13.4.tgz",
@@ -1992,6 +2003,11 @@
       "resolved": "http://192.168.1.90:4873/@types%2fcache-manager/-/cache-manager-3.4.2.tgz",
       "integrity": "sha1-1X5+XmN00QN73OdToFyXA+RINAE="
     },
+    "@types/component-emitter": {
+      "version": "1.2.11",
+      "resolved": "http://192.168.1.90:4873/@types%2fcomponent-emitter/-/component-emitter-1.2.11.tgz",
+      "integrity": "sha1-UNR9QrNHJTgXo5cJ/vA85moQhQY="
+    },
     "@types/connect": {
       "version": "3.4.35",
       "resolved": "http://192.168.1.90:4873/@types%2fconnect/-/connect-3.4.35.tgz",
@@ -2005,6 +2021,11 @@
       "resolved": "http://192.168.1.90:4873/@types%2fcontent-disposition/-/content-disposition-0.5.4.tgz",
       "integrity": "sha1-3kjPAcecnxVgvP2K5DIXqwKGV/g="
     },
+    "@types/cookie": {
+      "version": "0.4.1",
+      "resolved": "http://192.168.1.90:4873/@types%2fcookie/-/cookie-0.4.1.tgz",
+      "integrity": "sha1-v9AsHyIkVnZ2wVRRmfh8OoYdh40="
+    },
     "@types/cookiejar": {
       "version": "2.1.2",
       "resolved": "http://192.168.1.90:4873/@types%2fcookiejar/-/cookiejar-2.1.2.tgz",
@@ -2022,6 +2043,11 @@
         "@types/node": "*"
       }
     },
+    "@types/cors": {
+      "version": "2.8.12",
+      "resolved": "http://192.168.1.90:4873/@types%2fcors/-/cors-2.8.12.tgz",
+      "integrity": "sha1-ayxRCnrXA56Y57jT1lmPQ1nlwIA="
+    },
     "@types/debug": {
       "version": "0.0.31",
       "resolved": "http://192.168.1.90:4873/@types%2fdebug/-/debug-0.0.31.tgz",
@@ -3940,11 +3966,21 @@
         }
       }
     },
+    "base64-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "http://192.168.1.90:4873/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz",
+      "integrity": "sha1-h70TUlYm20qYOOAKUIwrc+/PNIw="
+    },
     "base64-js": {
       "version": "1.5.1",
       "resolved": "http://192.168.1.90:4873/base64-js/-/base64-js-1.5.1.tgz",
       "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
     },
+    "base64id": {
+      "version": "2.0.0",
+      "resolved": "http://192.168.1.90:4873/base64id/-/base64id-2.0.0.tgz",
+      "integrity": "sha1-J3Csa8R9MSr5eov5pjQ0LgzSXLY="
+    },
     "bcrypt-pbkdf": {
       "version": "1.0.2",
       "resolved": "http://192.168.1.90:4873/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@@ -4711,8 +4747,7 @@
     "component-emitter": {
       "version": "1.3.0",
       "resolved": "http://192.168.1.90:4873/component-emitter/-/component-emitter-1.3.0.tgz",
-      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
-      "dev": true
+      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
     },
     "compose-middleware": {
       "version": "5.0.1",
@@ -4870,6 +4905,11 @@
         }
       }
     },
+    "cookie": {
+      "version": "0.4.1",
+      "resolved": "http://192.168.1.90:4873/cookie/-/cookie-0.4.1.tgz",
+      "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
+    },
     "cookiejar": {
       "version": "2.1.3",
       "resolved": "http://192.168.1.90:4873/cookiejar/-/cookiejar-2.1.3.tgz",
@@ -4934,6 +4974,15 @@
       "resolved": "http://192.168.1.90:4873/core-util-is/-/core-util-is-1.0.3.tgz",
       "integrity": "sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U="
     },
+    "cors": {
+      "version": "2.8.5",
+      "resolved": "http://192.168.1.90:4873/cors/-/cors-2.8.5.tgz",
+      "integrity": "sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk=",
+      "requires": {
+        "object-assign": "^4",
+        "vary": "^1"
+      }
+    },
     "cosmiconfig": {
       "version": "7.0.1",
       "resolved": "http://192.168.1.90:4873/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
@@ -6160,6 +6209,51 @@
         "once": "^1.4.0"
       }
     },
+    "engine.io": {
+      "version": "6.1.0",
+      "resolved": "http://192.168.1.90:4873/engine.io/-/engine.io-6.1.0.tgz",
+      "integrity": "sha1-RZ6rDDckiZ17Y6IMOmg1z5KFeTk=",
+      "requires": {
+        "@types/cookie": "^0.4.1",
+        "@types/cors": "^2.8.12",
+        "@types/node": ">=10.0.0",
+        "accepts": "~1.3.4",
+        "base64id": "2.0.0",
+        "cookie": "~0.4.1",
+        "cors": "~2.8.5",
+        "debug": "~4.3.1",
+        "engine.io-parser": "~5.0.0",
+        "ws": "~8.2.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.3.2",
+          "resolved": "http://192.168.1.90:4873/debug/-/debug-4.3.2.tgz",
+          "integrity": "sha1-8KScGKyHeeMdSgxgKd+3aHPHQos=",
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "http://192.168.1.90:4873/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        },
+        "ws": {
+          "version": "8.2.3",
+          "resolved": "http://192.168.1.90:4873/ws/-/ws-8.2.3.tgz",
+          "integrity": "sha1-Y6VkVtsbBDZ9C3IaC4DK5ti+y7o="
+        }
+      }
+    },
+    "engine.io-parser": {
+      "version": "5.0.2",
+      "resolved": "http://192.168.1.90:4873/engine.io-parser/-/engine.io-parser-5.0.2.tgz",
+      "integrity": "sha1-aaLsPtQx2gIfBmZxLQfxBrz/ps4=",
+      "requires": {
+        "base64-arraybuffer": "~1.0.1"
+      }
+    },
     "enhanced-resolve": {
       "version": "4.5.0",
       "resolved": "http://192.168.1.90:4873/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
@@ -11127,6 +11221,11 @@
       "resolved": "http://192.168.1.90:4873/normalize-wheel-es/-/normalize-wheel-es-1.1.1.tgz",
       "integrity": "sha1-qAlttqVvlDMtiE/Y6+2ojy/HlWk="
     },
+    "notepack.io": {
+      "version": "2.2.0",
+      "resolved": "http://192.168.1.90:4873/notepack.io/-/notepack.io-2.2.0.tgz",
+      "integrity": "sha1-1+px0cuQCU+IxvPI2EJ3wtDNEBw="
+    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "http://192.168.1.90:4873/npm-run-path/-/npm-run-path-2.0.2.tgz",
@@ -12467,6 +12566,17 @@
         "strip-indent": "^3.0.0"
       }
     },
+    "redis": {
+      "version": "3.1.2",
+      "resolved": "http://192.168.1.90:4873/redis/-/redis-3.1.2.tgz",
+      "integrity": "sha1-dmhREX6AZT0j4O1TYlRnerZHY4w=",
+      "requires": {
+        "denque": "^1.5.0",
+        "redis-commands": "^1.7.0",
+        "redis-errors": "^1.2.0",
+        "redis-parser": "^3.0.0"
+      }
+    },
     "redis-commands": {
       "version": "1.7.0",
       "resolved": "http://192.168.1.90:4873/redis-commands/-/redis-commands-1.7.0.tgz",
@@ -13328,6 +13438,96 @@
         }
       }
     },
+    "socket.io": {
+      "version": "4.4.0",
+      "resolved": "http://192.168.1.90:4873/socket.io/-/socket.io-4.4.0.tgz",
+      "integrity": "sha1-gUCg2ywiI1+Iptzrhn5NXJvXBQc=",
+      "requires": {
+        "accepts": "~1.3.4",
+        "base64id": "~2.0.0",
+        "debug": "~4.3.2",
+        "engine.io": "~6.1.0",
+        "socket.io-adapter": "~2.3.3",
+        "socket.io-parser": "~4.0.4"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.3.2",
+          "resolved": "http://192.168.1.90:4873/debug/-/debug-4.3.2.tgz",
+          "integrity": "sha1-8KScGKyHeeMdSgxgKd+3aHPHQos=",
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "http://192.168.1.90:4873/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        }
+      }
+    },
+    "socket.io-adapter": {
+      "version": "2.3.3",
+      "resolved": "http://192.168.1.90:4873/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz",
+      "integrity": "sha1-TWER5NQun3ZG42W09XgmmCHxNIY="
+    },
+    "socket.io-parser": {
+      "version": "4.0.4",
+      "resolved": "http://192.168.1.90:4873/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
+      "integrity": "sha1-nqIbDWFQjRgZbvBKLGuatjD0wrA=",
+      "requires": {
+        "@types/component-emitter": "^1.2.10",
+        "component-emitter": "~1.3.0",
+        "debug": "~4.3.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.3.2",
+          "resolved": "http://192.168.1.90:4873/debug/-/debug-4.3.2.tgz",
+          "integrity": "sha1-8KScGKyHeeMdSgxgKd+3aHPHQos=",
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "http://192.168.1.90:4873/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        }
+      }
+    },
+    "socket.io-redis": {
+      "version": "6.1.1",
+      "resolved": "http://192.168.1.90:4873/socket.io-redis/-/socket.io-redis-6.1.1.tgz",
+      "integrity": "sha1-I2ECmmwLJcYC0UIuG+tBkH/Q6L8=",
+      "requires": {
+        "debug": "~4.3.1",
+        "notepack.io": "~2.2.0",
+        "redis": "^3.0.0",
+        "socket.io-adapter": "~2.2.0",
+        "uid2": "0.0.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.3.2",
+          "resolved": "http://192.168.1.90:4873/debug/-/debug-4.3.2.tgz",
+          "integrity": "sha1-8KScGKyHeeMdSgxgKd+3aHPHQos=",
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "http://192.168.1.90:4873/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        },
+        "socket.io-adapter": {
+          "version": "2.2.0",
+          "resolved": "http://192.168.1.90:4873/socket.io-adapter/-/socket.io-adapter-2.2.0.tgz",
+          "integrity": "sha1-Q6+RV8RgnnS4rdxoZ4c6x+tI/aI="
+        }
+      }
+    },
     "socks": {
       "version": "2.6.1",
       "resolved": "http://192.168.1.90:4873/socks/-/socks-2.6.1.tgz",
@@ -14653,6 +14853,11 @@
       "integrity": "sha1-isH7qfUiVv2wb7ieQSL6ajRsKZg=",
       "dev": true
     },
+    "uid2": {
+      "version": "0.0.3",
+      "resolved": "http://192.168.1.90:4873/uid2/-/uid2-0.0.3.tgz",
+      "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I="
+    },
     "unbox-primitive": {
       "version": "1.0.1",
       "resolved": "http://192.168.1.90:4873/unbox-primitive/-/unbox-primitive-1.0.1.tgz",

+ 3 - 0
package.json

@@ -22,6 +22,7 @@
     "@midwayjs/mongoose": "^2.13.4",
     "@midwayjs/process-agent": "^2.13.4",
     "@midwayjs/redis": "^2.13.4",
+    "@midwayjs/socketio": "^2.13.4",
     "@midwayjs/view-nunjucks": "^2.13.4",
     "@sc/handsontable": "^6.3.11",
     "@sc/tree": "^1.0.18",
@@ -57,6 +58,7 @@
     "@types/koa-bodyparser": "^4.3.1",
     "@types/koa-session": "^5.10.4",
     "@types/lodash": "^4.14.176",
+    "@types/socket.io-client": "^3.0.0",
     "@typescript-eslint/eslint-plugin": "^4.18.0",
     "@typescript-eslint/parser": "^4.18.0",
     "@vitejs/plugin-vue": "^1.9.3",
@@ -74,6 +76,7 @@
     "postcss": "^8.3.11",
     "prettier": "^2.4.1",
     "sass": "^1.43.4",
+    "socket.io-client": "^4.4.0",
     "tailwindcss": "^2.2.19",
     "typescript": "^4.4.3",
     "vite": "^2.6.4",

+ 18 - 7
src/apis/config/config.default.ts

@@ -47,13 +47,24 @@ export const view = {
 };
 
 export const mongoose = {
-  client: {
-    uri: "mongodb://192.168.1.90:60666/auditPlatform",
-    options: {
-      useNewUrlParser: true,
-      useUnifiedTopology: true,
-      user: "wisecost",
-      pass: "Smartcost3850888",
+  clients: {
+    default: {
+      uri: "mongodb://192.168.1.90:60666/auditPlatform",
+      options: {
+        useNewUrlParser: true,
+        useUnifiedTopology: true,
+        user: "wisecost",
+        pass: "Smartcost3850888",
+      },
     },
+    // db1: {
+    //   uri: "mongodb://xxxx:xxx/test1",
+    //   options: {
+    //     useNewUrlParser: true,
+    //     useUnifiedTopology: true,
+    //     user: "***********",
+    //     pass: "***********",
+    //   },
+    // },
   },
 };

+ 18 - 6
src/apis/service/base.ts

@@ -2,7 +2,7 @@ import { Inject } from "@midwayjs/decorator";
 import { RedisService } from "@midwayjs/redis";
 import { HttpService } from "@midwayjs/axios";
 import CacheService from "@/apis/service/cache";
-import { MongooseConnectionService } from "@midwayjs/mongoose";
+import { MongooseConnectionServiceFactory } from "@midwayjs/mongoose";
 import ModelName from "@/constants/dbEnum";
 import getSchemaByModelName from "@/apis/model";
 
@@ -18,16 +18,28 @@ export default abstract class BaseService {
   cacheService: CacheService;
 
   @Inject()
-  conn: MongooseConnectionService;
+  connFactory: MongooseConnectionServiceFactory;
 
   // 获取数据库的指定 Model
-  getModel<T>(modelName: ModelName) {
+  getModel<T>(modelName: ModelName, dbName?: string) {
+    let conn;
+    if (!dbName) {
+      conn = this.connFactory.get("default");
+    } else {
+      conn = this.connFactory.get(dbName);
+    }
     const schema = getSchemaByModelName(modelName);
-    return this.conn.model<T>(modelName, schema, modelName);
+    return conn.model<T>(modelName, schema, modelName);
   }
 
   // 获取数据库指定的 Collection
-  getCollection(modelName: ModelName) {
-    return this.conn.collection(modelName);
+  getCollection(modelName: ModelName, dbName?: string) {
+    let conn;
+    if (!dbName) {
+      conn = this.connFactory.get("default");
+    } else {
+      conn = this.connFactory.get(dbName);
+    }
+    return conn.collection(modelName);
   }
 }

+ 0 - 6
src/apis/service/user.ts

@@ -35,12 +35,6 @@ export default class UserService extends BaseService {
       avatar: "https://i.imgur.com/dM7Thhn.png",
     });
 
-    const msg = new this.MessageModel({
-      title: "标题",
-      content: "内容",
-    });
-
     await doc.save();
-    await msg.save();
   }
 }

+ 28 - 0
src/apis/socket/hello.ts

@@ -0,0 +1,28 @@
+import {
+  WSController,
+  Provide,
+  OnWSConnection,
+  Inject,
+  OnWSMessage,
+  WSEmit,
+} from "@midwayjs/decorator";
+import { Context } from "@midwayjs/socketio";
+
+@Provide()
+@WSController("/")
+export default class HelloSocketController {
+  @Inject()
+  ctx: Context;
+
+  @OnWSConnection()
+  async onConnectionMethod() {
+    console.log("on client connect", this.ctx.id);
+  }
+
+  @OnWSMessage("myEvent")
+  @WSEmit("myEventResult")
+  async gotMessage(data) {
+    console.log("on data got", this.ctx.id, data);
+    return "hello world";
+  }
+}