UNPKG

astroboy

Version:

Astroboy(阿童木)is a Nodejs SFB(Separation of Front and Back ends) framework, built on koa2.

110 lines 4.49 kB
"use strict"; const path = require("path"); const Koa = require("koa"); const events_1 = require("events"); const CoreLoader_1 = require("./CoreLoader"); const BaseClass_1 = require("./base/BaseClass"); const completeAssign = require('complete-assign'); const mockKoa_1 = require("../core/lib/mockKoa"); const compose = require("koa-compose"); /** * ## Astroboy Framework * * @author Big Mogician * @class Astroboy * @extends {EventEmitter} * @template DEFINE Framework Definition, defalut is `IAstroboyFrameworkDefine`. */ class Astroboy extends events_1.EventEmitter { constructor(options = {}) { super(); this.extends = { app: null, context: null, request: null, response: null, }; options.NODE_ENV = process.env.APPLICATION_STANDARD_ENV || process.env.NODE_ENV || options.NODE_ENV || 'development'; options.NODE_PORT = process.env.NODE_PORT || options.NODE_PORT || '8201'; options.ROOT_PATH = options.ROOT_PATH || process.cwd(); this.options = options; } get [Symbol.for('BASE_DIR')]() { return path.join(__dirname, '..'); } async run() { await this.init(); return new Promise((resolve) => { this.on('start', () => resolve(this)); this.start(); }); } async initAe() { this.app = new Koa(); this.app.env = this.options.NODE_ENV; this.app.proxy = this.options.PROXY; this.app.MODE_AE = this.options.MODE_AE; this.app.NODE_ENV = this.options.NODE_ENV; this.app.ROOT_PATH = this.options.ROOT_PATH; this.app.ROOT_NAME = path.basename(this.options.ROOT_PATH); this.loader = new CoreLoader_1.CoreLoader({ astroboy: this, app: this.app, }); await this.loader.load(); completeAssign(mockKoa_1.application, this.app); } handleCtx(ctx) { var _a, _b, _c, _d; Object.setPrototypeOf(ctx.app, (this.extends.app = (_a = this.extends.app) !== null && _a !== void 0 ? _a : Object.setPrototypeOf(mockKoa_1.application, Object.getPrototypeOf(ctx.app)))); Object.setPrototypeOf(ctx.request, (this.extends.request = (_b = this.extends.request) !== null && _b !== void 0 ? _b : Object.setPrototypeOf(mockKoa_1.request, Object.getPrototypeOf(ctx.request)))); Object.setPrototypeOf(ctx.response, (this.extends.response = (_c = this.extends.response) !== null && _c !== void 0 ? _c : Object.setPrototypeOf(mockKoa_1.response, Object.getPrototypeOf(ctx.response)))); Object.setPrototypeOf(ctx, (this.extends.context = (_d = this.extends.context) !== null && _d !== void 0 ? _d : Object.setPrototypeOf(mockKoa_1.context, Object.getPrototypeOf(ctx)))); return compose(this.loader.middlewareList)(ctx); } async init() { this.app = new Koa(); this.app.env = this.options.NODE_ENV; this.app.proxy = this.options.PROXY; this.app.NODE_ENV = this.options.NODE_ENV; this.app.ROOT_PATH = this.options.ROOT_PATH; this.app.ROOT_NAME = path.basename(this.options.ROOT_PATH); this.loader = new CoreLoader_1.CoreLoader({ astroboy: this, app: this.app, }); await this.loader.load(); } start() { this.app.listen(this.options.NODE_PORT, () => { console.log('应用启动成功'); console.log(`访问地址:${'http://127.0.0.1:' + this.options.NODE_PORT}`); this.emit('start', this.app); }); this.app.on('error', (err, ctx) => { this.emit('error', err, ctx); }); // 添加默认的 error 事件监听器 setTimeout(() => { if (this.listenerCount('error') === 0) { this.on('error', (err, ctx) => { console.log('[default error callback]'); console.log(err); }); } }, 3000); } } (function (Astroboy) { /** ### Astroboy Base Class */ Astroboy.BaseClass = BaseClass_1.BaseClass; /** ### Astroboy Controller Base */ Astroboy.Controller = BaseClass_1.BaseClass; /** ### Astroboy Service Base */ Astroboy.Service = BaseClass_1.BaseClass; /** ### Astroboy <Helper&Utils> Base */ Astroboy.Helper = BaseClass_1.BaseClass; })(Astroboy || (Astroboy = {})); module.exports = Astroboy; //# sourceMappingURL=Astroboy.js.map