koa2 mvc framework easy to use
npm install
npm install koa-action
yarn install
yarn add koa-action
##make dirs
|-- src
|-- controllers // controller目录
|-- entries // typeorm entry 目录
|-- interceptors
|-- po // Pojo Beans
|-- services // services
|-- config.ts // 配置文件
|-- index.ts // APP file
import './config';
import { KoaAction, ScanPath, Log, ScanAspects } from '../koa-action';
import { AuthInterceptor } from './interceptors/AuthInterceptor';
@ScanPath('./src/controllers')
@ScanAspects('./src/aspects')
class Service extends KoaAction{
@Log()
private log: any;
constructor () {
super();
this.init();
}
init () {
this.registerInterceptor(new AuthInterceptor())
.run();
}
}
const s = new Service();
//run
npm run dev
import { Global } from "../koa-action/Global";
Global.config = {
serviceName: 'xxx',
port: 18080,
upload: 'uploads',
dataSource: {
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
entities: ['src/**/*.entity{.js,.ts}'],
synchronize: false,
logger: undefined, // 'advanced-console',
logging: false //'all',
},
redis: {
host: '127.0.0.1',
port: 6379,
password: '',
db: 2
},
redisSession: {
key: 'ka.sid',
ttl: 5 * 60 * 1000 // 5分钟
},
logger: {
name: 'fqbd',
numBackups: 15,
pattern: '[%d{yyyy-MM-dd hh:mm:ss}] [pid:%z] [%p] [%C.%M] %c - %m',
path: path.resolve(process.cwd(), 'logs', 'logs.log'),
level: 'info',
pm2: true,
pm2InstanceVar: 'INSTANCE_ID'
}
};
框架内置多个装饰器方便进行web开发
类装饰器 指定controller路径
@ScanPath('./src/controllers')
class Service extends KoaAction{}
类装饰器 指定AOP路径
@ScanAspects('./src/aspects')
class Service extends KoaAction{}
类装饰器 指定模块路由
@Controller('/admin')
class AdminController {}
类装饰器 注册Service类型的实例,无传值
@Service
export class AdminService {}
属性装饰器 注入日志,对应的对象只初始化一次
@Log()
private log: any;
属性装饰器 注入该类型的对象,对应的对象只初始化一次, 无传值
@Autowired
private userDao: UserDao;
函数装饰器method 为GET的路由
@Get('/list')
async list (@Param('name') a: string, @Headers headers: any):Promise<DataResponse> {}
函数装饰器method 为POST的路由
@Post('/add')
async add (@Body user: User):Promise<DataResponse> {}
函数装饰器method 为Put的路由
函数装饰器method 为Delete的路由
函数装饰器method 为Head的路由
函数装饰器method 为All的路由
函数装饰器 指定要返回的状态码
函数装饰器 指定要返回的content-type
属性装饰器 根据name属性获取url中的参数
@Get('/list')
async list (@Param('name') a: string, @Headers headers: any):Promise<DataResponse> {}
属性装饰器 获取request中的headers信息
@Get('/list')
async list (@Param('name') a: string, @Headers headers: any):Promise<DataResponse> {}
属性装饰器 获取上传的Body中的信息
@Post('/login')
async login (@Body user: User, @Context ctx: any):Promise<DataResponse> {}
属性装饰器 获取上下文对象
@Post('/login')
async login (@Body user: User, @Context ctx: any):Promise<DataResponse> {}
属性装饰器 获取上传文件参数
@Post('/upload')
async upload (@File('file') file: any, @Context ctx: any):Promise<DataResponse> {}
属性装饰器 获取ctx.request对象
属性装饰器 获取ctx.response对象
属性装饰器 获取cookies对象
属性装饰器 获取cookies对象中指定的参数
属性装饰器 获取session对象
属性装饰器 获取session对象中的属性
属性装饰器 获取授权信息
属性装饰器 对属性进行校验,使用class-validator组件
@Post('/add')
async add (@Validate @Body a: User):Promise<DataResponse> {}
定时任务 agenda 消息队列 bull