diff --git a/package.json b/package.json index 8e4670b..e52775d 100755 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "dependencies": { "@cool-midway/core": "^5.0.6", "@cool-midway/es": "^5.0.2", - "@cool-midway/file": "^5.0.2", + "@cool-midway/file": "^5.0.3", "@cool-midway/pay": "^5.0.0", "@cool-midway/rpc": "^5.0.1", "@cool-midway/task": "^5.0.1", @@ -21,6 +21,7 @@ "@midwayjs/static-file": "^3.2.0", "@midwayjs/validate": "^3.2.0", "@midwayjs/view-ejs": "^3.2.0", + "cfork": "^1.8.0", "ipip-ipdb": "^0.6.0", "jsonwebtoken": "^8.5.1", "mini-svg-data-uri": "^1.4.4", @@ -45,7 +46,8 @@ "node": ">=12.0.0" }, "scripts": { - "start": "NODE_ENV=prod node ./bootstrap.js", + "start_single": "NODE_ENV=prod node ./bootstrap.js", + "start": "NODE_ENV=prod node ./server.js", "dev": "cross-env && cross-env NODE_ENV=local TS_NODE_TYPE_CHECK=false TS_NODE_TRANSPILE_ONLY=true midway-bin dev --ts", "test": "midway-bin test --ts", "cov": "midway-bin cov --ts", diff --git a/server.js b/server.js new file mode 100644 index 0000000..8aea631 --- /dev/null +++ b/server.js @@ -0,0 +1,51 @@ +'use strict'; + +const cfork = require('cfork'); +const util = require('util'); +const path = require('path'); +const os = require('os'); + +// 获取 cpu 核数 +const cpuNumbers = os.cpus().length; + +cfork({ + exec: path.join(__dirname, './bootstrap.js'), + count: cpuNumbers, +}) + .on('fork', worker => { + console.warn( + '[%s] [worker:%d] new worker start', + Date(), + worker.process.pid + ); + }) + .on('disconnect', worker => { + console.warn( + '[%s] [master:%s] wroker:%s disconnect, exitedAfterDisconnect: %s, state: %s.', + Date(), + process.pid, + worker.process.pid, + worker.exitedAfterDisconnect, + worker.state + ); + }) + .on('exit', (worker, code, signal) => { + const exitCode = worker.process.exitCode; + const err = new Error( + util.format( + 'worker %s died (code: %s, signal: %s, exitedAfterDisconnect: %s, state: %s)', + worker.process.pid, + exitCode, + signal, + worker.exitedAfterDisconnect, + worker.state + ) + ); + err.name = 'WorkerDiedError'; + console.error( + '[%s] [master:%s] wroker exit: %s', + Date(), + process.pid, + err.stack + ); + }); diff --git a/src/config/config.default.ts b/src/config/config.default.ts index d535509..229c5d4 100644 --- a/src/config/config.default.ts +++ b/src/config/config.default.ts @@ -8,6 +8,10 @@ export default { koa: { port: 8001, }, + // 文件上传 + upload: { + fileSize: '200mb', + }, // 模板渲染 view: { mapping: { diff --git a/src/modules/base/middleware/authority.ts b/src/modules/base/middleware/authority.ts index 05ede2a..ce8f844 100644 --- a/src/modules/base/middleware/authority.ts +++ b/src/modules/base/middleware/authority.ts @@ -1,9 +1,10 @@ -import { App, Config, Middleware } from '@midwayjs/decorator'; +import { App, Config, Inject, Middleware } from '@midwayjs/decorator'; import * as _ from 'lodash'; import { RESCODE } from '@cool-midway/core'; import * as jwt from 'jsonwebtoken'; import { NextFunction, Context } from '@midwayjs/koa'; import { IMiddleware, IMidwayApplication } from '@midwayjs/core'; +import { CacheManager } from '@midwayjs/cache'; /** * 权限校验 @@ -18,7 +19,8 @@ export class BaseAuthorityMiddleware @Config('module.base') jwtConfig; - coolCache; + @Inject() + cacheManager: CacheManager; @App() app: IMidwayApplication; @@ -60,10 +62,8 @@ export class BaseAuthorityMiddleware }; return; } - // 需要动态获得缓存 - this.coolCache = await ctx.requestContext.getAsync('cool:cache'); // 判断密码版本是否正确 - const passwordV = await this.coolCache.get( + const passwordV = await this.cacheManager.get( `admin:passwordVersion:${ctx.admin.userId}` ); if (passwordV != ctx.admin.passwordVersion) { @@ -74,7 +74,7 @@ export class BaseAuthorityMiddleware }; return; } - const rToken = await this.coolCache.get( + const rToken = await this.cacheManager.get( `admin:token:${ctx.admin.userId}` ); if (!rToken) { @@ -88,11 +88,11 @@ export class BaseAuthorityMiddleware if (rToken !== token && this.jwtConfig.sso) { statusCode = 401; } else { - let perms = await this.coolCache.get( + let perms: string[] = await this.cacheManager.get( `admin:perms:${ctx.admin.userId}` ); if (!_.isEmpty(perms)) { - perms = JSON.parse(perms).map(e => { + perms = perms.map(e => { return e.replace(/:/g, '/'); }); if (!perms.includes(url.split('?')[0].replace('/admin/', ''))) { diff --git a/src/modules/base/service/sys/login.ts b/src/modules/base/service/sys/login.ts index 2eca1e1..6edabce 100644 --- a/src/modules/base/service/sys/login.ts +++ b/src/modules/base/service/sys/login.ts @@ -87,14 +87,8 @@ export class BaseSysLoginService extends BaseService { roleIds, user.username === 'admin' ); - await this.cacheManager.set( - `admin:department:${user.id}`, - JSON.stringify(departments) - ); - await this.cacheManager.set( - `admin:perms:${user.id}`, - JSON.stringify(perms) - ); + await this.cacheManager.set(`admin:department:${user.id}`, departments); + await this.cacheManager.set(`admin:perms:${user.id}`, perms); await this.cacheManager.set(`admin:token:${user.id}`, result.token); await this.cacheManager.set( `admin:token:refresh:${user.id}`, diff --git a/src/modules/base/service/sys/perms.ts b/src/modules/base/service/sys/perms.ts index 784f16d..31716b9 100644 --- a/src/modules/base/service/sys/perms.ts +++ b/src/modules/base/service/sys/perms.ts @@ -68,7 +68,7 @@ export class BaseSysPermsService extends BaseService { `admin:department:${userId}` ); if (department) { - return JSON.parse(department); + return department; } else { return []; }