这个项目（typescript-boot）时一个typescript后端http服务脚手架。它通过提供一些易用的工具类以及约定式的编程规则让开发者可以快速构建自己的后端http服务。
最终它会被打包成名字为typescript-boot的npm包供开发者使用。
typescript-boot通过src/index.ts提供了所有工具，我来逐一介绍它们：
`SeeksWebServer`时核心工具，后续的发布接口、路由规则、约定式的接口规范都需要最终通过它来转换成对外开放的api接口；
`SeeksRoute`文件导出`ResponseAsBufferFile`用于让service中的接口返回一个ResponseAsBufferFile类的实例（通过new），来完成文件的下载。`SeeksRoute`文件中的其他内容都不会被使用者用到。
`BaseService`文件导出的是一个包含预定义成员变量的类，方便使用者快速构建`接口Service`（即指定path命名空间的一组api接口，它里面的方法就是具体的`接口方法`）
`BaseDao`文件导出的是一个包含预定义成员变量的类，其实只有一个成员变量dbClient，它指向当前系统在启动时设置的默认的全局数据库操作客户端。
`ApiDecorators`文件导出的是一组注解，它可以让使用者方便的修饰自己的`接口Service`、`接口方法`、`VO/BO对象`，以此让这些对象拥有一些特性，或者对其进行描述以便能够自动生成文档。
`ServiceLogManager`文件导出的是全局日志管理相关的方法和类型，在启动时通过setupServiceLogManager来设置日志管理器，便可以让使用者在代码的任何地方通过getServiceLogger获取日志管理器来快捷的插入日志，使用者只需要通过构造一个类型为CustomLogObject的对象就能完成复杂的日志插入操作。
`SeeksAuthorization`文件导出的是会话与权限管理相关的核心类型和方法。`createToken`与`parseToken`用于生成和解析token；`SessionUser`、`SeeksSession`、`SessionManager`、`LoginResult`用于约束登录态相关的数据结构；`setupSessionManager`用于在系统启动时设置全局会话管理器，`getSessionManager`用于在业务代码里获取它。一般使用者只需要自己实现或选择一个`SessionManager`，然后在启动时调用`setupSessionManager`即可，后续框架在鉴权、获取当前登录用户、注册/销毁session时都会用到它。
`SessionManagerByFS`文件导出的是一个基于文件系统的session管理器实现。它会把session保存在内存和本地文件中，并定时清理过期session，适合单机部署场景，不适合多节点分布式部署。使用者可以在启动时通过`new SessionManagerByFS(sessionExpiredTime, dataDir)`创建实例，再配合`setupSessionManager`启用它。
`SessionManagerByRedis`文件导出的是一个基于Redis的session管理器实现。它会把session信息和最后活跃时间保存到Redis中，并定时清理过期session，适合多节点部署或需要共享登录态的场景。使用它之前需要先初始化Redis客户端，然后在启动时通过`new SessionManagerByRedis(sessionExpiredTime)`配合`setupSessionManager`启用。
`RedisClient`文件导出的是Redis客户端的全局初始化和获取方法。`setupRedisConfig`用于在启动时配置Redis连接，它既支持传入单个Redis配置，也支持传入两个配置来实现一个简单的主备切换；`getRedisClient`用于在代码其他地方获取当前正在使用的Redis客户端。
`DataBaseClient`文件导出的是数据库访问的统一抽象以及一组相关工具。使用者通常会通过`new DataBaseClient(具体数据库实现)`来获得统一的查、改、分页、按条件增删改查等能力，也可以通过`setupDataBaseClient`和`getDataBaseClient`把它注册成全局默认数据库客户端供`BaseDao`等地方直接使用。除此之外，这个文件还导出了数据库密码加解密、对象属性与数据库字段映射、原样SQL值包装、文件转二进制等辅助方法和类型。
`MysqlClient`文件导出的是基于`mysql2/promise`实现的MySQL数据库客户端，它实现了`DataBaseClient`所依赖的底层数据库操作接口。使用者一般会通过`new MysqlClient(config)`创建它，再交给`DataBaseClient`包装使用。它额外提供了连接池、事务批量更新、对象映射、分页SQL拼接、SQL打印开关，以及`getTableMeta`这类读取表结构信息的方法。
`EMailClient`文件导出的是邮件发送相关的类型、接口和全局注册方法。`EmailObject`描述了一封邮件的基础结构，`EMailClient`规定了邮件客户端需要实现的发送接口，`setupEmailClient`和`getEmailClient`用于在系统中注册和获取全局邮件客户端；另外`generateVerifyCode`提供了一个生成纯数字验证码的快捷方法。
`QQEmailClient`文件导出的是一个基于`nodemailer`实现的QQ邮箱SMTP客户端。`QQEMailClientConfig`用于描述配置结构，`QQEmailClient`实现了`EMailClient`接口，使用者可以在传入QQ邮箱SMTP配置后，配合`setupEmailClient`把它注册为系统默认的发邮件工具。
`UploadFileFormUtils`文件导出的是处理文件上传表单的工具。`getUploadFormData(req)`会解析`multipart/form-data`请求，并返回包含`fields`和`files`的结果对象；上传的文件会先落到系统临时目录中，默认限制单次上传文件总大小为100MB。它适合在service接口里快速处理带文件的表单请求。
`dev-tools`和`common-routes`文件导出的内容一般使用者不会用到，可以忽略
`ConsoleLogUtils`文件导出的是方便在后端日志打印的方法和开启/关闭方法。
`EncodeUtils`文件导出的`encodePassword`是密码加密的快捷方法（MD5+转大写）, `generateUUID`是生成uuid的快捷方法
