Github: https://github.com/Allen7D/koa-ts
本项目可用于学习Typescript在Node.js中的后端实践,包括如下:
1、熟悉Typescript的常用写法
2、Koa的异步的Promise写法转为同步的Async/Await写法
3、装饰器在中间件上使用,实现拆分路由装饰器、权限控制装饰器
4、AOP(面向切面编程)设计,实现参数校验层、异常统一处理层
5、Model模型JSON序列化控制,实现API接口级的字段显示与隐藏
6、易扩展的接口版本管理
快速上手
在src\config\index.ts中进行项目参数配置
export default {environment: 'dev', // dev: 开发模式、prod: 生产模式port: 3000, // 端口号database: {dbName: 'island', // 数据库名host: 'localhost',port: 3306,username: 'root', // 账号password: '159951', // 密码force: false, // 是否强制删除后重建表logging: true, // 打印 ORM所执行的 SQL语句},security: {secretKey: 'But you, Lord , are a shield around me, my glory, the One who lifts my head high.',expiresIn: 60 * 60 * 24 * 30, // 60秒 * 60 * 24 * 30 = 1个月},wx: {appID: '**abc123**', // 微信小程序IDappSecret: '**abc123**', // 微信小程序密钥loginUrl: 'https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code',},yushu: {detailUrl: 'http://t.yushu.im/v2/book/id/%s',keywordUrl: 'http://t.yushu.im/v2/book/search?q=%s&count=%s&start=%s&summary=%s',},}
电脑数据库的名称、账号和密码,此外支持小程序登录需填充小程序的ID和密钥。
其中,默认端口号为3000
项目讲解
目录结构
.├── app.ts // 项目入口文件├── core // 项目核心代码│ ├── init.ts // 项目初始化│ ├── base-validator.ts // 校验方法的基类│ ├── db.ts // Model的基类│ ├── decorator.ts // 装饰器│ ├── http-exception.ts // 基础的通用性异常│ ├── middleware // 中间件│ │ ├── auth.ts // 权限控制│ │ └── exception.ts // 异常统一处理│ └── util.ts├── config // 配置文件│ └── index.ts├── types // Typescript自定义类型│ └── index.ts└── app├── api│ ├── cms // API接口(cms版本)│ │ └── user.ts // 用户管理API接口│ └── v1 // API接口(v1版本)│ ├── book.ts // 书籍API接口│ ├── classic.ts // 期刊API接口│ ├── like.ts // 点赞API接口│ ├── token.ts // 登录令牌API接口│ └── user.ts // 用户API接口├── exception // 业务相关异常│ └── index.ts├── lib│ ├── enum.ts // 统一的枚举│ └── scope.ts // 权限级别├── model // Model层(数据库)│ ├── art.ts //│ ├── book.ts // 书籍表│ ├── classic.ts // 期刊(音乐、摘句、影片)表│ ├── comment.ts // 书籍评论表│ ├── favor.ts // 收藏表│ ├── flow.ts // 期刊号表│ ├── hot-book.ts // 热门书籍表│ └── user.ts // 用户表├── service // Service层│ ├── login-verify.ts // 登录相关校验服务│ └── wx-token.ts // 微信登录相关服务└── validator // 参数校验层└── index.ts
路由装饰器
权限装饰器
Swagger 接口文档
基于 TypeScript 的 IoC 与 DI
Daruk.js 文档)
[基于 TypeScript 的 IoC 与 DI] https://zhuanlan.zhihu.com/p/72323250
InversifyJS 中文文档)
什么是 IoC?
IoC 英文全称为 Inversion of Control,即控制反转。
控制反转是面向对象编程中的一种原则,用于降低代码之间的耦合度。传统应用程序都是在类的内部主动创建依赖对象,这样将导致类与类之间耦合度非常高,并且不容易测试。有了 IoC 容器之后,可以将创建和查找依赖对象的控制权交给了容器,这样对象与对象之间就是松散耦合了,方便测试与功能复用,整个程序的架构体系也会变得非常灵活。
什么是DI?
DI 英文全称为 Dependency Injection,即依赖注入。
依赖注入是控制反转最常见的一种应用方式,即通过控制反转,在对象创建的时候,自动注入一些依赖对象。
