mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
bug fixes
This commit is contained in:
6 files changed
+19
-19
No files matched your search
@@ -437,7 +437,7 @@ ${c.response.status} ${endTime - startTime}ms ${c.response.length}`);
|
||||
...this.handlerLayers,
|
||||
{
|
||||
name: '404',
|
||||
func: (t) => this.handleHttp(t, NotFoundHandler, () => true),
|
||||
func: (t) => this.handleHttp(t, NotFoundHandler, () => true, this.ctx),
|
||||
},
|
||||
]));
|
||||
this.addLayer('base', base(logger, this.config.xff, this.config.xhost));
|
||||
@@ -471,10 +471,10 @@ ${c.response.status} ${endTime - startTime}ms ${c.response.length}`);
|
||||
});
|
||||
}
|
||||
|
||||
private async handleHttp(ctx: KoaContext, HandlerClass, checker) {
|
||||
private async handleHttp(ctx: KoaContext, HandlerClass, checker, savedContext) {
|
||||
const { args } = ctx.HydroContext;
|
||||
Object.assign(args, ctx.params);
|
||||
const h = new HandlerClass(ctx, this.ctx);
|
||||
const h = new HandlerClass(ctx, savedContext);
|
||||
ctx.handler = h;
|
||||
const method = ctx.method.toLowerCase();
|
||||
const name = ((Object.hasOwn(HandlerClass, kHandler) && typeof HandlerClass[kHandler] === 'string')
|
||||
@@ -550,9 +550,9 @@ ${c.response.status} ${endTime - startTime}ms ${c.response.length}`);
|
||||
}
|
||||
}
|
||||
|
||||
private async handleWS(ctx: KoaContext, HandlerClass, checker, conn?, layer?) {
|
||||
private async handleWS(ctx: KoaContext, HandlerClass, checker, conn?, layer?, savedContext?) {
|
||||
const { args } = ctx.HydroContext;
|
||||
const h = new HandlerClass(ctx, this.ctx);
|
||||
const h = new HandlerClass(ctx, savedContext);
|
||||
// FIXME: should pass type check
|
||||
await (this.ctx.parallel as any)('connection/create', h);
|
||||
const stream = new PassThrough();
|
||||
@@ -695,18 +695,19 @@ ${c.response.status} ${endTime - startTime}ms ${c.response.length}`);
|
||||
};
|
||||
};
|
||||
|
||||
// if (name === 'ContestScoreboard') {
|
||||
// console.log('-------------', this.ctx, this.ctx.scoreboard);
|
||||
// }
|
||||
|
||||
// We hope to use parent context for handler (the context that calls register)
|
||||
// So that handler can use services injected before calling register
|
||||
const savedContext = Object.hasOwn(this.ctx, Symbol.for('cordis.shadow'))
|
||||
? Object.getPrototypeOf(this.ctx)
|
||||
: this.ctx;
|
||||
if (type === 'route') {
|
||||
router.all(routeName, path, (ctx) => this.handleHttp(ctx as any, HandlerClass, Checker(permPrivChecker)));
|
||||
router.all(routeName, path, (ctx) => this.handleHttp(ctx as any, HandlerClass, Checker(permPrivChecker), savedContext));
|
||||
} else {
|
||||
const checker = Checker(permPrivChecker);
|
||||
const layer = router.ws(path, async (conn, _req, ctx) => {
|
||||
await this.handleWS(ctx as any, HandlerClass, checker, conn, layer);
|
||||
await this.handleWS(ctx as any, HandlerClass, checker, conn, layer, savedContext);
|
||||
});
|
||||
router.get(path, (ctx) => this.handleWS(ctx as any, HandlerClass, checker, null, null));
|
||||
router.get(path, (ctx) => this.handleWS(ctx as any, HandlerClass, checker, null, null, savedContext));
|
||||
}
|
||||
const dispose = router.disposeLastOp;
|
||||
// @ts-ignore
|
||||
|
||||
@@ -119,8 +119,8 @@ export default class ElasticSearchService extends Service {
|
||||
Schema.object({
|
||||
domainId: Schema.string(),
|
||||
}),
|
||||
this.run,
|
||||
this.run.bind(this),
|
||||
);
|
||||
this.ctx.provideModule('problemSearch', 'elastic', this.problemSearch);
|
||||
this.ctx.provideModule('problemSearch', 'elastic', this.problemSearch.bind(this));
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import { load as loadOptions } from '../options';
|
||||
import { MongoService } from '../service/db';
|
||||
import { ConfigService } from '../settings';
|
||||
import {
|
||||
addon, builtinModel, lib, model, script, service, setting,
|
||||
addon, builtinModel, model, service, setting,
|
||||
} from './common';
|
||||
|
||||
const argv = cac().parse();
|
||||
@@ -122,7 +122,6 @@ export async function load(ctx: Context) {
|
||||
await ctx.loader.reloadPlugin(require.resolve('../service/storage'), 'file');
|
||||
require('../lib/index');
|
||||
await Promise.all([
|
||||
lib(pending, fail, ctx),
|
||||
service(pending, fail, ctx),
|
||||
]);
|
||||
ctx.plugin(require('../service/worker'));
|
||||
@@ -140,6 +139,5 @@ export async function load(ctx: Context) {
|
||||
for (const h of await fs.readdir(scriptDir)) {
|
||||
ctx.loader.reloadPlugin(path.resolve(scriptDir, h), '');
|
||||
}
|
||||
await script(pending, fail, ctx);
|
||||
await cli();
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import { load } from '../options';
|
||||
import { MongoService } from '../service/db';
|
||||
import { ConfigService } from '../settings';
|
||||
import {
|
||||
addon, builtinModel, locale, model, service,
|
||||
addon, builtinModel, locale, model, service, setting,
|
||||
} from './common';
|
||||
|
||||
const argv = cac().parse();
|
||||
@@ -58,6 +58,7 @@ export async function apply(ctx: Context) {
|
||||
await service(pending, fail, ctx);
|
||||
await builtinModel(ctx);
|
||||
await model(pending, fail, ctx);
|
||||
await setting(pending, fail, require('../model/setting'));
|
||||
|
||||
const handlerDir = path.resolve(__dirname, '..', 'handler');
|
||||
const handlers = await fs.readdir(handlerDir);
|
||||
|
||||
@@ -676,7 +676,6 @@ class ScoreboardService extends Service {
|
||||
views: Record<string, ScoreboardView<any>> = {};
|
||||
constructor(ctx: Context) {
|
||||
super(ctx, 'scoreboard');
|
||||
ctx.set('scoreboard', this);
|
||||
}
|
||||
|
||||
addView<T extends { [key: string]: keyof BuiltinInput | AnyFunction | Type<any> }>(
|
||||
|
||||
@@ -24,6 +24,7 @@ factory.addExporter(new Exporter.Console({
|
||||
},
|
||||
timestamp: Date.now(),
|
||||
}));
|
||||
factory.exporters.get(1).levels = { default: process.env.DEV ? 3 : 2 };
|
||||
|
||||
function createLogger(name: string) {
|
||||
return factory.createLogger(name);
|
||||
|
||||
Reference in new issue
Block a user