@pricking/core
v0.0.10
Published
a simple node framework based on koa2, in order to improve development efficiency.
Downloads
2
Readme
pricking-koa
a simple node framework based on koa2, in order to improve development efficiency.
WARNING: now only as an api server.
focus
rootPath is application root directory
- The rootPath must contain
controllers
folder to load router. - if want add extra middlewares, you can add
middlewares
folder in rootPath.
Necessary directory convention specification
src
├── controllers # use decorator to define router
├── extends
│ └── context.ts # append extra property to ctx
└── middlewares # custom middlewares
about extra middleware
Don't design middleware that depends on execution order.(if necessary, only export a compose middleware)
It's worth mentioning that the middleware loading will traverse every possible file under the folder.
decorator
how to use it?
import { Controller, Description, Get } from 'pricking-koa/dist/utils/decorator';
import BaseController from 'pricking-koa/dist/controllers/BaseController';
// path pattern -> ${controllerPath}/*
@Controller('/v3/books')
class AnalyseController extends BaseController {
@Index(['/', '(.*)']) // (.*) -> https://github.com/koajs/router/blob/master/history.md
@Description()
async index() {
/** WARNING: should add plugin */
this.ctx.render('book/index.ejs', { currentTime: Date.now() });
}
// path pattern -> ${controllerPath}/api/${subPath}
// path register -> /v3/books/api/info
// as same as @Post, @Delete, @Put
@Get('/info')
@Description('getBookInfo')
async getBookInfo() {
this.ctx.success({});
}
@Post('/search')
@Description('search')
async searchBook() {
this.ctx.success({});
}
@Get('/origin')
@Description('getBookOriginDetail')
async getBookOriginDetail() {
this.ctx.success({});
}
}
export = AnalyseController;
import { PrickingApplication } from 'pricking-koa';
new PrickingApplication({
// framework will auto load route from <ROOT>/controllers
rootPath: __dirname,
port: 3002,
env: 'dev',
debug: true,
});
middleware
export = (options: IOptions) => async (ctx, next) => {
console.log(options.env);
console.log('hello');
await next();
console.log('end');
};
target
- [x] all in ts
- [x] debug in ts mode
- [x] lint
- [x] test
- [x] clean middleware loader
- [x] simple decorator to define route faster
- [x] support @Index decorator