This commit is contained in:
COOL 2022-03-27 19:41:20 +08:00
parent ca038a4141
commit 7b9affde5c
6 changed files with 70 additions and 19 deletions

View File

@ -6,7 +6,7 @@
"dependencies": { "dependencies": {
"@cool-midway/core": "^5.0.6", "@cool-midway/core": "^5.0.6",
"@cool-midway/es": "^5.0.2", "@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/pay": "^5.0.0",
"@cool-midway/rpc": "^5.0.1", "@cool-midway/rpc": "^5.0.1",
"@cool-midway/task": "^5.0.1", "@cool-midway/task": "^5.0.1",
@ -21,6 +21,7 @@
"@midwayjs/static-file": "^3.2.0", "@midwayjs/static-file": "^3.2.0",
"@midwayjs/validate": "^3.2.0", "@midwayjs/validate": "^3.2.0",
"@midwayjs/view-ejs": "^3.2.0", "@midwayjs/view-ejs": "^3.2.0",
"cfork": "^1.8.0",
"ipip-ipdb": "^0.6.0", "ipip-ipdb": "^0.6.0",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"mini-svg-data-uri": "^1.4.4", "mini-svg-data-uri": "^1.4.4",
@ -45,7 +46,8 @@
"node": ">=12.0.0" "node": ">=12.0.0"
}, },
"scripts": { "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", "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", "test": "midway-bin test --ts",
"cov": "midway-bin cov --ts", "cov": "midway-bin cov --ts",

51
server.js Normal file
View File

@ -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
);
});

View File

@ -8,6 +8,10 @@ export default {
koa: { koa: {
port: 8001, port: 8001,
}, },
// 文件上传
upload: {
fileSize: '200mb',
},
// 模板渲染 // 模板渲染
view: { view: {
mapping: { mapping: {

View File

@ -1,9 +1,10 @@
import { App, Config, Middleware } from '@midwayjs/decorator'; import { App, Config, Inject, Middleware } from '@midwayjs/decorator';
import * as _ from 'lodash'; import * as _ from 'lodash';
import { RESCODE } from '@cool-midway/core'; import { RESCODE } from '@cool-midway/core';
import * as jwt from 'jsonwebtoken'; import * as jwt from 'jsonwebtoken';
import { NextFunction, Context } from '@midwayjs/koa'; import { NextFunction, Context } from '@midwayjs/koa';
import { IMiddleware, IMidwayApplication } from '@midwayjs/core'; import { IMiddleware, IMidwayApplication } from '@midwayjs/core';
import { CacheManager } from '@midwayjs/cache';
/** /**
* *
@ -18,7 +19,8 @@ export class BaseAuthorityMiddleware
@Config('module.base') @Config('module.base')
jwtConfig; jwtConfig;
coolCache; @Inject()
cacheManager: CacheManager;
@App() @App()
app: IMidwayApplication; app: IMidwayApplication;
@ -60,10 +62,8 @@ export class BaseAuthorityMiddleware
}; };
return; 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}` `admin:passwordVersion:${ctx.admin.userId}`
); );
if (passwordV != ctx.admin.passwordVersion) { if (passwordV != ctx.admin.passwordVersion) {
@ -74,7 +74,7 @@ export class BaseAuthorityMiddleware
}; };
return; return;
} }
const rToken = await this.coolCache.get( const rToken = await this.cacheManager.get(
`admin:token:${ctx.admin.userId}` `admin:token:${ctx.admin.userId}`
); );
if (!rToken) { if (!rToken) {
@ -88,11 +88,11 @@ export class BaseAuthorityMiddleware
if (rToken !== token && this.jwtConfig.sso) { if (rToken !== token && this.jwtConfig.sso) {
statusCode = 401; statusCode = 401;
} else { } else {
let perms = await this.coolCache.get( let perms: string[] = await this.cacheManager.get(
`admin:perms:${ctx.admin.userId}` `admin:perms:${ctx.admin.userId}`
); );
if (!_.isEmpty(perms)) { if (!_.isEmpty(perms)) {
perms = JSON.parse(perms).map(e => { perms = perms.map(e => {
return e.replace(/:/g, '/'); return e.replace(/:/g, '/');
}); });
if (!perms.includes(url.split('?')[0].replace('/admin/', ''))) { if (!perms.includes(url.split('?')[0].replace('/admin/', ''))) {

View File

@ -87,14 +87,8 @@ export class BaseSysLoginService extends BaseService {
roleIds, roleIds,
user.username === 'admin' user.username === 'admin'
); );
await this.cacheManager.set( await this.cacheManager.set(`admin:department:${user.id}`, departments);
`admin:department:${user.id}`, await this.cacheManager.set(`admin:perms:${user.id}`, perms);
JSON.stringify(departments)
);
await this.cacheManager.set(
`admin:perms:${user.id}`,
JSON.stringify(perms)
);
await this.cacheManager.set(`admin:token:${user.id}`, result.token); await this.cacheManager.set(`admin:token:${user.id}`, result.token);
await this.cacheManager.set( await this.cacheManager.set(
`admin:token:refresh:${user.id}`, `admin:token:refresh:${user.id}`,

View File

@ -68,7 +68,7 @@ export class BaseSysPermsService extends BaseService {
`admin:department:${userId}` `admin:department:${userId}`
); );
if (department) { if (department) {
return JSON.parse(department); return department;
} else { } else {
return []; return [];
} }