UNPKG

kobp

Version:
93 lines 3.11 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseRoutedController = exports.KobpRouter = void 0; const koa_router_1 = __importDefault(require("koa-router")); class KobpRouter extends koa_router_1.default { } exports.KobpRouter = KobpRouter; class BaseRoutedController { constructor(allRoutesMiddlewares = []) { this.allRoutesMiddlewares = allRoutesMiddlewares; } getRouteMaps() { return { ...(this.__drm || {}), /* will be injected from decorators package */ }; } async handleSuccess(ctx, data) { ctx.status = 200; ctx.body = { success: true, data }; } /** * Counter path of getRouter(). Use this method to register the controller to given router. * * @param path * @param koaRouter */ register(path, koaRouter, ...middlewares) { const r = this.getRouter(); // clean the path - path may ended with extra slashes that we don't need. const cleanPath = path.trim().replace(/\/*$/, ''); koaRouter.use(cleanPath, ...middlewares, r.routes(), r.allowedMethods()); } getRouter() { const router = new KobpRouter(); const map = this.getRouteMaps(); for (const fname in map) { let { method, path } = map[fname]; const { middlewares } = map[fname]; path = path || `/${fname}`; if (typeof method === 'string') { method = [method]; } for (const _m of method) { const mw = [...this.allRoutesMiddlewares, ...(middlewares || [])]; for (let i = 0; i < mw.length; i += 1) { router[_m](path, mw[i]); } router[_m](path, async (ctx, _next) => { try { const out = await this[fname || 'index'](ctx); const res = ctx.response; if (!res.doNotHandleSuccess) { await this.handleSuccess(ctx, out); } } catch (error) { ctx.throw(error); } }); } } return router; } /** * Tell the context to disable default JSON output handler * * @example * ``` * class SomeController { * @Route('/') * async call(context: KobpServiceContext): Promise<void> { * this.setDoNotHandleSuccess(context) * context.redirect('/login') * } * } * ``` */ setDoNotHandleSuccess(context) { context.response.doNotHandleSuccess = true; } getMiddlewares() { const r = this.getRouter(); return [r.routes(), r.allowedMethods()]; } } exports.BaseRoutedController = BaseRoutedController; //# sourceMappingURL=base.controller.js.map