mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
framework: better middleware stack
This commit is contained in:
2 files changed
+12
-5
No files matched your search
@@ -290,14 +290,19 @@ class NotFoundHandler extends Handler {
|
|||||||
function executeMiddlewareStack(context: any, middlewares: { name: string, func: Function }[]) {
|
function executeMiddlewareStack(context: any, middlewares: { name: string, func: Function }[]) {
|
||||||
let index = -1;
|
let index = -1;
|
||||||
context.__timers ||= {};
|
context.__timers ||= {};
|
||||||
async function dispatch(i) {
|
function dispatch(i) {
|
||||||
if (i <= index) throw new Error('next() called multiple times');
|
if (i <= index) return Promise.reject(new Error('next() called multiple times'));
|
||||||
index = i;
|
index = i;
|
||||||
if (!middlewares[i]) return null;
|
if (!middlewares[i]) return Promise.resolve();
|
||||||
const name = middlewares[i].name;
|
const name = middlewares[i].name;
|
||||||
|
const fn = middlewares[i].func;
|
||||||
context.__timers[`${name}.start`] = Date.now();
|
context.__timers[`${name}.start`] = Date.now();
|
||||||
try {
|
try {
|
||||||
return await middlewares[i].func(context, dispatch.bind(null, i + 1));
|
return Promise.resolve(fn(context, dispatch.bind(null, i + 1))).finally(() => {
|
||||||
|
context.__timers[`${name}.end`] = Date.now();
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
return Promise.reject(e);
|
||||||
} finally {
|
} finally {
|
||||||
context.__timers[`${name}.end`] = Date.now();
|
context.__timers[`${name}.end`] = Date.now();
|
||||||
}
|
}
|
||||||
@@ -510,8 +515,11 @@ ${c.response.status} ${endTime - startTime}ms ${c.response.length}`);
|
|||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
try {
|
try {
|
||||||
|
console.log(1, e);
|
||||||
await this.ctx.serial(`handler/error/${HandlerClass.name.replace(/Handler$/, '')}`, h, e);
|
await this.ctx.serial(`handler/error/${HandlerClass.name.replace(/Handler$/, '')}`, h, e);
|
||||||
|
console.log(2, e);
|
||||||
await this.ctx.serial('handler/error', h, e);
|
await this.ctx.serial('handler/error', h, e);
|
||||||
|
console.log(3, e);
|
||||||
await h.onerror(e);
|
await h.onerror(e);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error(err);
|
logger.error(err);
|
||||||
|
|||||||
@@ -102,7 +102,6 @@ export class Handler extends HandlerOriginal {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.response.status = error instanceof UserFacingError ? error.code : 500;
|
this.response.status = error instanceof UserFacingError ? error.code : 500;
|
||||||
logger.error(error);
|
|
||||||
this.response.template = error instanceof UserFacingError ? 'error.html' : 'bsod.html';
|
this.response.template = error instanceof UserFacingError ? 'error.html' : 'bsod.html';
|
||||||
this.response.body = {
|
this.response.body = {
|
||||||
UserFacingError,
|
UserFacingError,
|
||||||
|
|||||||
Reference in new issue
Block a user