The koa server wrapper. That's all what you need to start build koa based server.
SETUP
npm install --save koa-core-server
HOW TO USE
Project structure should looks like this.
server initialization
constServer=require('koa-core-server');// Path to koa-core in node_modulesconstpath=require('path');constroutePath=path.join(__dirname,'routers');// dir where you routers liveconstcontrollersPath=path.join(__dirname,'controllers');// dir where you controllers liveconstdataAccessPath=path.join(__dirname,'dataAccess');// dir where you data access liveconstserver=newServer({
routePath,
controllersPath,
dataAccessPath,clustering: {bool},// by default is false, run you app with workersloadersStatus: {bool},// by default false, show loader statuses});server.use((ctx,next)=>{// that how you can connect you middlewareconsole.log('hello from middleware');next();});server.start();
router
constRouter=require('koa-router');module.exports=classHelloRouterextendsRouter{constructor(){super();this.name='Hello router';// optional if not define will be used file name"this.rootPath=null;// optional by default will be using first part of the file name `hello.router -> /hello`this.helloController=this.injector.get('helloCustomName');// get controller from injector controller name defining in controller class via // `this.name` or if not define use controller file name with postfix in camel case notation `user.controller -> userController`}load(){this.get('/',this.helloController.getHello.bind(this.helloController));// define you routers herethis.get('/by',this.helloController.sayBy.bind(this.helloController));// define you routers herereturnthis;// return this is required in `this` lives you routers}};
controller
module.exports=classHelloController{constructor(){this.name='helloCustomName';// controller name will be set in controller injector and you can find controller by this name in injector or use // controller file name with postfix in camel case notation `user.controller -> userController`this.helloDataAccess=this.injector.get('helloDataAccess');// get you data access for this controller by name defining in data access class `this.name` or use file name in camel case notation with postfix `hello.dataAccess -> helloDataAccess` }asyncgetHello(ctx,next){// controller methods uses in routers should be defined like plain koa function with async and ctx and next like parametersctx.response.body=awaitthis.helloDataAccess.getHello();}asyncsayBy(ctx,next){// controller methods uses in routers should be defined like plain koa function with async and ctx and next like parametersctx.response.body=awaitthis.helloDataAccess.getGoodBy();}}
dataAccess
module.exports=classHelloDataAccess{getHello(){// this methods will be using in controllerreturnPromise.resolve('hello');}getGoodBy(){// this methods will be using in controllerreturnPromise.resolve('good by');}}