mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-18 17:38:19 +08:00
framework: server.registerRenderer
This commit is contained in:
6 files changed
+24
-11
No files matched your search
@@ -77,10 +77,7 @@ export default (logger, xff, xhost) => async (ctx: KoaContext, next: Next) => {
|
||||
}
|
||||
response.type = 'application/json';
|
||||
} else if (response.template) {
|
||||
const s = response.template.split('.');
|
||||
let templateName = `${s[0]}.${args.domainId}.${s[1]}`;
|
||||
if (!global.Hydro.ui.template[templateName]) templateName = response.template;
|
||||
response.body = await handler.renderHTML(templateName, response.body || {});
|
||||
response.body = await handler.renderHTML(response.template, response.body || {});
|
||||
response.type = 'text/html';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,6 +68,7 @@ export interface HydroResponse {
|
||||
attachment: (name: string, stream?: any) => void;
|
||||
addHeader: (name: string, value: string) => void;
|
||||
}
|
||||
export type RendererFunction = (name: string, context: Record<string, any>) => string | Promise<string>;
|
||||
type HydroContext = {
|
||||
request: HydroRequest;
|
||||
response: HydroResponse;
|
||||
@@ -163,8 +164,7 @@ export class HandlerCommon {
|
||||
|
||||
renderHTML(templateName: string, args: Record<string, any>) {
|
||||
const type = templateName.split('.')[1];
|
||||
const engine = global.Hydro.module.render[type]
|
||||
|| (() => JSON.stringify(args, serializer(false, this)));
|
||||
const engine = this.ctx.server.renderers[type] || (() => JSON.stringify(args, serializer(false, this)));
|
||||
return engine(templateName, {
|
||||
handler: this,
|
||||
UserContext: this.user,
|
||||
@@ -316,6 +316,7 @@ export class WebService extends Service {
|
||||
private wsLayers = [];
|
||||
private captureAllRoutes = {};
|
||||
|
||||
renderers: Record<string, RendererFunction> = {};
|
||||
server = koa;
|
||||
router = router;
|
||||
HandlerCommon = HandlerCommon;
|
||||
@@ -657,6 +658,14 @@ ${c.response.status} ${endTime - startTime}ms ${c.response.length}`);
|
||||
HandlerCommon.prototype[val] = MixinClass[val];
|
||||
}
|
||||
}
|
||||
|
||||
public registerRenderer(name: string, func: RendererFunction) {
|
||||
if (this.renderers[name]) logger.warn('Renderer %s already exists.', name);
|
||||
this.renderers[name] = func;
|
||||
this[Context.current]?.on('dispose', () => {
|
||||
delete this.renderers[name];
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
declare module 'cordis' {
|
||||
|
||||
Reference in new issue
Block a user