后台:上传资源
This commit is contained in:
@@ -208,4 +208,10 @@ export default class GameController extends Controller {
|
||||
ctx.body = await ctx.service.game.getDicTaskType();
|
||||
return
|
||||
}
|
||||
|
||||
public async getServerName() {
|
||||
const { ctx } = this;
|
||||
ctx.body = await ctx.service.game.getServerName();
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,9 +14,9 @@ const hotUpdateAddr = `/root/${folderName}`;
|
||||
const publishPath = '/root/hot_update_backup';
|
||||
import {exec} from 'child_process'
|
||||
import { reloadResources } from '@pubUtils/data';
|
||||
import { decodeArrayStr } from '@pubUtils/util';
|
||||
const sendToWormhole = require('stream-wormhole');
|
||||
|
||||
|
||||
export default class UploadController extends Controller {
|
||||
|
||||
private deleteFolder (path) {
|
||||
@@ -148,7 +148,7 @@ export default class UploadController extends Controller {
|
||||
// 解压上传文件的stream
|
||||
var unzipExtractor = unzip.Extract({ path: dirPath });
|
||||
unzipExtractor.on('close', function() {
|
||||
resolve();
|
||||
resolve(null);
|
||||
});
|
||||
|
||||
unzipExtractor.on('close', function(e) {
|
||||
@@ -170,26 +170,30 @@ export default class UploadController extends Controller {
|
||||
public async uploadJson() {
|
||||
const { ctx } = this;
|
||||
|
||||
|
||||
const parts = ctx.multipart({ });
|
||||
const files = [];
|
||||
|
||||
try {
|
||||
let stream;
|
||||
let writeStream;
|
||||
|
||||
while ((stream = await parts()) != null) {
|
||||
console.log('******', stream);
|
||||
const filename = stream.filename;
|
||||
let filenameWithoutEx = filename?filename.split('.')[0]:'';
|
||||
if (stream.mimeType == 'application/json') {
|
||||
if (filenameWithoutEx.match(/^\d{1,}$/)) {
|
||||
let target1 = path.join(this.config.baseDir, this.warjsonFolder, filename);
|
||||
let target2 = path.join(this.config.baseDir, this.distWarjsonFolder, filename);
|
||||
const writeStream = fs.createWriteStream(target1);
|
||||
writeStream = fs.createWriteStream(target1);
|
||||
await pump(stream, writeStream);
|
||||
fs.copyFileSync(target1, target2);
|
||||
files.push(filename);
|
||||
} else {
|
||||
let target1 = path.join(this.config.baseDir, this.jsonFolder, filename);
|
||||
let target2 = path.join(this.config.baseDir, this.distJsonFolder, filename);
|
||||
const writeStream = fs.createWriteStream(target1);
|
||||
writeStream = fs.createWriteStream(target1);
|
||||
await pump(stream, writeStream);
|
||||
fs.copyFileSync(target1, target2);
|
||||
files.push(filename);
|
||||
@@ -197,13 +201,23 @@ export default class UploadController extends Controller {
|
||||
} else if (stream.mimeType == 'application/octet-stream') {
|
||||
let target1 = path.join(this.config.baseDir, this.tsFolder, 'dicParam.js');
|
||||
let target2 = path.join(this.config.baseDir, this.distTsFolder, filename);
|
||||
const writeStream = fs.createWriteStream(target1);
|
||||
writeStream = fs.createWriteStream(target1);
|
||||
await pump(stream, writeStream);
|
||||
fs.copyFileSync(target1, target2);
|
||||
files.push(filename);
|
||||
}
|
||||
|
||||
let envs = decodeArrayStr(ctx.request.headers.env||'', ',');
|
||||
|
||||
if(envs.length > 0) { // 转发
|
||||
for(let env of envs) {
|
||||
if(env == ctx.app.config.realEnv) continue;
|
||||
await ctx.service.utils.transmit(env, ctx.request.url, writeStream);
|
||||
}
|
||||
}
|
||||
sendToWormhole(stream);
|
||||
}
|
||||
|
||||
}catch(e) {
|
||||
console.error(e);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ export default (app: Application) => {
|
||||
router.post('/api/login/account', controller.login.login);
|
||||
router.post('/api/login/changeMyPass', tokenParser, controller.login.changeMyPass);
|
||||
router.post('/api/get_route', controller.login.getMenu);
|
||||
router.get('/api/currentUser', tokenParser, controller.login.currentUser);
|
||||
router.post('/api/currentUser', tokenParser, controller.login.currentUser);
|
||||
router.post('/api/upload/hotupdate', tokenParser, controller.upload.upload);
|
||||
router.post('/api/upload/uploadjson', tokenParser, controller.upload.uploadJson);
|
||||
router.post('/api/upload/reloadresource', tokenParser, controller.upload.reloadResource);
|
||||
@@ -73,6 +73,7 @@ export default (app: Application) => {
|
||||
router.post('/api/game/getdicrmb', tokenParser, controller.game.getDicRMB);
|
||||
router.post('/api/game/getdicactivitytype', tokenParser, controller.game.getDicActivityType);
|
||||
router.post('/api/game/getdictasktype', tokenParser, controller.game.getDicTaskType);
|
||||
router.post('/api/game/getservername', controller.game.getServerName)
|
||||
|
||||
// router.post('/api/game/getserverstategylist', controller.game.getServerStategyList);
|
||||
// router.post('/api/game/updateserverstategy', controller.game.updateServerStategy);
|
||||
|
||||
@@ -16,6 +16,7 @@ import { nowSeconds } from '@pubUtils/timeUtil';
|
||||
import { WhiteListModel } from '@db/RegionWhiteList';
|
||||
import { RoleModel } from '@db/Role';
|
||||
import { SearchMarqueeParam } from '@domain/backEndField/search';
|
||||
import { DicServerName } from '@pubUtils/dictionary/DicServerName';
|
||||
|
||||
/**
|
||||
* Test Service
|
||||
@@ -278,6 +279,16 @@ export default class Game extends Service {
|
||||
})
|
||||
}
|
||||
|
||||
public async getServerName() {
|
||||
let list: DicServerName[] = [];
|
||||
for(let [_, serverName] of gameData.serverNames) {
|
||||
list.push(serverName);
|
||||
}
|
||||
return this.ctx.service.utils.resResult(STATUS.SUCCESS, {
|
||||
list
|
||||
})
|
||||
}
|
||||
|
||||
public async getNoticeList(page: number, pageSize: number, sortField: string, sortOrder: string, form: { content?: string }) {
|
||||
const { ctx } = this;
|
||||
const list = await NoticeModel.findByCondition(page, pageSize, sortField, sortOrder, form);
|
||||
|
||||
@@ -72,4 +72,18 @@ export default class Utils extends Service {
|
||||
log.error(`${message}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async transmit(env: string, route: string, stream: any) {
|
||||
const { ctx } = this;
|
||||
console.log('****transmit', stream);
|
||||
const result = await ctx.curl(`http://127.0.0.1:7002${route}`, {
|
||||
method: 'POST',
|
||||
files: stream,
|
||||
|
||||
headers: {
|
||||
token: ctx.request.headers.token
|
||||
}
|
||||
});
|
||||
console.log(env, result)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,6 +81,7 @@ export default (appInfo: EggAppInfo) => {
|
||||
{ id: 2, env: 'alpha', name: "测试服", domain: 'http://zyz_gm.trgame.cn' },
|
||||
{ id: 3, env: 'dev', name: "开发服", domain: 'http://zyzdev_gm.trgame.cn' }
|
||||
];
|
||||
config.regions = regions;
|
||||
|
||||
let httpProxy: any = {};
|
||||
for(let { env, domain } of regions) {
|
||||
|
||||
@@ -22,7 +22,25 @@ export default (appInfo: EggAppInfo) => {
|
||||
url: '127.0.0.1', // 内网
|
||||
pw: ''
|
||||
};
|
||||
config.proxy = {};
|
||||
|
||||
let regions = [ // 大区数据
|
||||
{ id: 1, env: 'test', name: "测试", domain: 'http://127.0.0.1:7002' },
|
||||
];
|
||||
config.regions = regions;
|
||||
|
||||
let httpProxy: any = {};
|
||||
for(let { env, domain } of regions) {
|
||||
httpProxy[`/api/${env}`] = {
|
||||
target: domain,
|
||||
changeOrigin: true,
|
||||
secure: true,
|
||||
pathRewrite: function(path) {
|
||||
console.log('proxy', path, path.replace(`/api/${env}`, '/api'))
|
||||
return path.replace(`/api/${env}`, '/api')
|
||||
}
|
||||
}
|
||||
}
|
||||
config.proxy = httpProxy;
|
||||
|
||||
// the return config will combines to EggAppConfig
|
||||
return {
|
||||
|
||||
45
gm-server/package-lock.json
generated
45
gm-server/package-lock.json
generated
@@ -1039,8 +1039,7 @@
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
|
||||
"dev": true
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"atob": {
|
||||
"version": "2.1.2",
|
||||
@@ -2894,7 +2893,6 @@
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
@@ -3291,8 +3289,7 @@
|
||||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
|
||||
"dev": true
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||
},
|
||||
"delegates": {
|
||||
"version": "1.0.0",
|
||||
@@ -5471,13 +5468,12 @@
|
||||
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
|
||||
},
|
||||
"form-data": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
|
||||
"integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
|
||||
"dev": true,
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
|
||||
"integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.6",
|
||||
"combined-stream": "^1.0.8",
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
@@ -5488,13 +5484,20 @@
|
||||
"dev": true
|
||||
},
|
||||
"formstream": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/formstream/-/formstream-1.1.0.tgz",
|
||||
"integrity": "sha1-UfOXDyYTbrCtRDBN5M67UCB7RHk=",
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/formstream/-/formstream-1.1.1.tgz",
|
||||
"integrity": "sha512-yHRxt3qLFnhsKAfhReM4w17jP+U1OlhUjnKPPtonwKbIJO7oBP0MvoxkRUwb8AU9n0MIkYy5X5dK6pQnbj+R2Q==",
|
||||
"requires": {
|
||||
"destroy": "^1.0.4",
|
||||
"mime": "^1.3.4",
|
||||
"mime": "^2.5.2",
|
||||
"pause-stream": "~0.0.11"
|
||||
},
|
||||
"dependencies": {
|
||||
"mime": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
|
||||
"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"fragment-cache": {
|
||||
@@ -7123,7 +7126,8 @@
|
||||
"mime": {
|
||||
"version": "1.6.0",
|
||||
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
||||
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
|
||||
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
||||
"dev": true
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.44.0",
|
||||
@@ -10445,6 +10449,17 @@
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"form-data": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
|
||||
"integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.6",
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
|
||||
@@ -21,7 +21,9 @@
|
||||
"lint": "eslint . --ext .ts",
|
||||
"clean": "ets clean",
|
||||
"local": "EGG_SERVER_ENV=local npm run dev",
|
||||
"prod": "EGG_SERVER_ENV=prod npm run dev"
|
||||
"prod": "EGG_SERVER_ENV=prod npm run dev",
|
||||
"deve": "EGG_SERVER_ENV=dev npm run dev",
|
||||
"dis": "EGG_SERVER_ENV=dis npm run dev"
|
||||
},
|
||||
"dependencies": {
|
||||
"await-stream-ready": "^1.0.1",
|
||||
@@ -34,6 +36,8 @@
|
||||
"egg-cors": "^2.2.3",
|
||||
"egg-http-proxy-middleware": "^1.0.3",
|
||||
"egg-scripts": "^2.6.0",
|
||||
"form-data": "^4.0.0",
|
||||
"formstream": "^1.1.1",
|
||||
"moment": "^2.29.0",
|
||||
"pump": "^3.0.0",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
|
||||
@@ -37,7 +37,8 @@ export default class AccuseRec extends BaseModel {
|
||||
}
|
||||
|
||||
private static getSearchObj(form: {}) {
|
||||
let searchObj = form;
|
||||
let searchObj = {};
|
||||
console.log(form);
|
||||
return searchObj
|
||||
}
|
||||
|
||||
@@ -52,6 +53,7 @@ export default class AccuseRec extends BaseModel {
|
||||
sort[sortField] = -1;
|
||||
}
|
||||
}
|
||||
console.log('page', page, 'pageSize', pageSize, 'sort', sort)
|
||||
const result: AccuseRecType[] = await AccuseRecModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
|
||||
return result;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user