# koa-boot **Repository Path**: yutangcun/koa-boot ## Basic Information - **Project Name**: koa-boot - **Description**: Koa-Boot框架是基于Koa框架二次封装的轻量级IOC框架,使用装饰器简化Koa接口功能开发,增加IOC容器概念,增加Yaml配置文件。 - **Primary Language**: TypeScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-06-21 - **Last Updated**: 2023-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简介 KOA-BOOT是基于KOA进行二次封装的框架,旨在实现IOC的理念,并且封装了装饰器简化开发者开发。该框架集成了常用的技术框架,包括Redis和MySQL等。KOA-BOOT能够提供全面的支持,增强程序的灵活性、可维护性和解耦性。借助IOC的思想,开发者可以更便捷地管理和注入对象。装饰器的应用使得开发过程更加简洁高效。 ## 下载&安装 获取项目 ```linux git clone https://gitee.com/yutangcun/koa-boot.git ``` 安装依赖 ```linux npm install ``` 启动项目 ```linux npm run start ``` ## 装饰器介绍 - @Component - 作用域:类 - 参数:无 - 作用:常用用于组件,被标记的类会在项目启动阶段被扫描并且加入至IOC容器中。 - @Controller - 作用域:类 - 参数:无 - 作用:常用于控制层,被标记的类会在项目启动阶段被扫描并且加入至IOC容器中。 - @Service - 作用域:类 - 参数:无 - 作用:常用于服务层,被标记的类会在项目启动阶段被扫描并且加入至IOC容器中。 - @Repository - 作用域:类 - 参数:无 - 作用:常用于模型层,被标记的类会在项目启动阶段被扫描并且加入至IOC容器中。 - @Autowired - 作用域:属性 - 参数:无 - 作用:常用于属性注入,被标记的属性在创建类期间对属性进行寻找,找到则进行注入。 - @RequestMapping - 作用域:类 - 参数:prefix,对应请求路径的前缀 - 作用:常用于给模块添加具体的请求路径前缀 - @GetMapping - 作用域:方法 - 参数:url, 会根据此路径查找对应的方法和AJAX的请求方法映射 - 作用:被标记的方法使用AJAX访问具体的路径的时候执行,对应AJAX的GET方法 - @PostMapping - 作用域:方法 - 参数:url, 会根据此路径查找对应的方法和AJAX的请求方法映射 - 作用:被标记的方法使用AJAX访问具体的路径的时候执行,对应AJAX的POST方法 - @KoaContext - 作用域:方法参数 - 参数:无 - 作用:把KOA的Context参数注入至指定的参数中 - @RequestParam - 作用域:方法参数 - 参数:name. 参数的名称 - 作用:常用于控制层的方法中,被标记的参数会进行属性注入 - @RequestBody - 作用域:方法参数 - 参数:无 - 作用:常用于控制层方法中,被标记的方法会进行对象类型的属性注入 ## 配置文件介绍 目前Koa-Boot对配置文件也进行了整合,因时间有限所以整合出来的配置也相对较少,有如下配置 - 服务配置 - 框架配置 - 日志配置 ### 服务配置 服务配置目前只提供端口号配置,如果需要修改端口号则修改以下配置 ```yml #服务配置 server: port: 8082 #服务启动端口号 ``` ### 框架配置 框架配置主要是集成一些中间件的配置(Redis,Mysql)以及部分统一的配置(统一前缀) ```yml # 框架配置 koaBoot: #项目启动统一前缀 prefix: /api #Redis配置 redis: #是否启用Redis true 启用 false 禁用 enable: true #端口号 port: 6379 #IP地址 host: 127.0.0.1 。默认是空值 #username: root #密码。默认是控制 password: 123456 #数据库索引值 database: 2 #Mysql配置 mysql: #是否启用mysql true 启用 false 禁用 enable: true #IP地址 host: 192.168.100.18 #host: 192.168.1.166 #端口号 port: 3306 #数据库名称 database: iot-system #数据库账号 username: root #数据库密码 password: '123456' #模型目录。级数据库表映射模型所存在的目录 # modelDir: model #默认配置 default: #数据库字符集 default: utf8mb4 #是否自动填充 timestamps: true #创建时间别名,默认 create_time createdAt: "create_time" #更新时间别名,默认 update_time updatedAt: "update_time" #逻辑删除别名,默认 is_deleted deletedAt: "is_deleted" #数据库连接池配置 pool: #最大连接数 10 max: 10, #最小连接数 min: 0, #获取连接的最长等待时间(毫秒),超时后将抛出错误,默认为 30000 acquire: 30000, #连接空闲时间(毫秒)超过该时间后将被释放,默认为 10000 idle: 10000 ``` ### 日志配置 日志配置主要是框架日志配置的地方,提供可配置化的日志输出形式。 ```yml #日志配置 logger: #根项目日志打印级别 root: INFO #日志存活时间,超过此时间则删除。单位:天 daysToKeep: 7 #日志存储目录名称 filePath: logs #日志文件名称 filename: access #日志文件输出格式 pattern: '-yyyy-MM-dd.log' #是否压缩日志文件 compress: false #日志输出样式 layout: type: 'pattern' pattern: '[%d{yyyy-MM-dd hh:mm:ss}] [%p] %m' ``` ## 约定俗成 所谓的约定俗成就是一些规约,一些约定。Koa-Boot框架也有一些约定需要开发者进行遵守。 ### TS文件的约定 需要加入IOC容器管理的类必须独立在一个TS文件,有且只有一个类对外暴露,文件命名与类名保持一致,遵循大驼峰的规则命名如下示例: UserController.ts ```ts class UserController { .... } export default UserController; ``` ### 控制层(Controller)方法约定 对于标注这 @Controller 装饰器的类,其方法必须是一个异步方法,并且返回一个 Promise 对如下示例: ```ts class UserController { @PostMapping("/test") public async test3(@RequestParam("name") name: string): Promise { const user = new User(); return user; } } export default UserController; ``` ### 装饰器使用约定 使用装饰器标注一个类时,请尽量使用寓意表明的对应的装饰器,让代码阅读行提高做到见名知意 ### 静态资源使用约定 静态的资源尽量放入 resource 文件夹中,框架提供了 KoaBootFile 类对此目录下的文件进行操作 ## 结语 只要遵循本文档进行开发,就可以打开优雅开发大门,不再需要关注对象的创建,路由文件的映射,以及静态资源读取问题。全程开发都使用装饰器开发,可谓是优雅至极。 ###### 相关链接 [KoaBoot框架的问世](https://juejin.cn/post/7247354308257562680) [KoaBoot框架的进步](https://juejin.cn/post/7252864660516945976)