astroboy
Version:
Astroboy(阿童木)is a Nodejs SFB(Separation of Front and Back ends) framework, built on koa2.
70 lines • 2.56 kB
JavaScript
;
/**
* 扩展 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