UNPKG

astroboy

Version:

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

70 lines 2.56 kB
"use strict"; /** * 扩展 Koa Context 对象 */ const assert = require("assert"); const ctxExtends = { getConfig(...args) { return this.app.getConfig(...args); }, getServiceClass(...args) { return this.app.getServiceClass(...args); }, getService(packageName, serviceName) { assert(packageName, 'Package name cannot be empty!'); assert(serviceName, 'Service name cannot be empty!'); if (this.app.services && this.app.services[packageName] && this.app.services[packageName][serviceName]) { const ServiceClass = this.app.services[packageName][serviceName]; return new ServiceClass(this); } else { throw new Error(`Service ${packageName} ${serviceName} is not found.`); } }, async callService(service, method, ...args) { const keys = service.split('/'); let packageName = undefined; let serviceName = undefined; if (keys.length === 2) { packageName = keys[0]; serviceName = keys[1]; } else if (keys.length === 1) { packageName = this.app.ROOT_NAME; serviceName = keys[0]; } if (this.app.services && this.app.services[packageName] && this.app.services[packageName][serviceName]) { const ServiceClass = this.app.services[packageName][serviceName]; const service = new ServiceClass(this); if (service[method]) { return await service[method](...args); } else { throw new Error(`method name ${method} is not found.`); } } else { throw new Error(`Service ${packageName} ${serviceName} is not found.`); } }, invokeServiceMethod(pkgName, serviceName, methodName, ...args) { if (this.app.services && this.app.services[pkgName] && this.app.services[pkgName][serviceName]) { const ServiceClass = this.app.services[pkgName][serviceName]; const service = new ServiceClass(this); if (service[methodName]) { return service[methodName](...args); } else { throw new Error(`method name ${methodName} is not found.`); } } else { throw new Error(`Service ${pkgName} ${serviceName} is not found.`); } }, getLib(...args) { return this.app.getLib(...args); }, }; module.exports = ctxExtends; //# sourceMappingURL=context.js.map