# koa-ts **Repository Path**: aibabelx/koa-ts ## Basic Information - **Project Name**: koa-ts - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-09 - **Last Updated**: 2024-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## koa-ts 使用 TypeScript 构建 Koa2 项目的最佳实践.
### 快速开始 1. 在终端输入: `npm init koa-ts` 初始化项目模板 2. 安装依赖: `yarn` 3. 重命名 `.env.example` 为 `.env`,随后运行 `prisma db push` 迁移数据库模型 4. 运行服务:`yarn dev`,访问 http://127.0.0.1:3000/apis/sessions   **(可选)** 项目为开发环境内置 compose,运行 `yarn dev:db` 启动 (如果您已有 docker)
### 目录 ``` ├── app │   ├── controllers --- 控制器 │   ├── helpers --- 帮助工具集 (拦截器、错误集、验证等) │   ├── jobs --- 任务 (定时任务、触发任务、邮件任务等) │   ├── entities --- 数据实体,数据库模型文件 │   └── services --- controller 与 model 的粘合层 (提拱一些实用方法...) ├── config │   ├── constants --- 环境配置 │  ├── koa.middlewares --- Koa 中间件配置 │  ├── routing.middlewares --- Routing Controller 中间件配置 │  ├── routing.options --- Routing Controller 参数配置 │   ├── bootstrap --- 启动声明周期 │   ├── interceptors --- 全局的拦截器 │   └── utils --- 纯函数的帮助方法 └── test --- 测试工具函数 ├── variables.env --- 环境变量文件,如果在此文件设置将会覆盖 'config/environments' ```
### 特性 - 业务逻辑与配置分离,一目了然 - scheme model 等同于 interface,更符合 TS 的代码风格 - 依赖注入在 Koa 项目中的最佳实践 - 测试与 Lint 脚手架 - 得益于 Prisma 的自动数据模型约束 - TypeScript hot-load, 开发便捷
### 生命周期参考 1. 调用 `app.ts` -> 准备环境变量 `constants` -> 获取环境文件 `variables.env` 2. 准备完毕,调用 `bootstrap.before()` 3. 挂载 `routing-controllers` -> 挂载 Koa 中间件 -> 注册 `Container` 4. 启动 `Koa`。完毕调用 `bootstrap.after()`
### 数据库链接 项目默认使用 Prisma 作为智能化 ORM 工具,支持 `PostgreSQL` / `MySQL` / `SQLite`。 - 你可以在文件 `.env` 中修改数据库的链接配置。 - 每次编辑文件 `/prisma/schema.prisma` 修改模型后,建议运行 `prisma migrate dev` 来迁移数据库。 - 每次编辑文件 `/prisma/schema.prisma` 修改模型后,建议运行 `prisma generate` 生成类型文件。
### 关于环境变量 在 NodeJS 运行中,`ENV` 并不等于 `NODE_ENV`: - 当 NodeJS 项目被 build 后 (如在服务端运行),总是设置 `NODE_ENV=PRODUCTION`,这会影响一些第三方库的优化。 - `NODE_ENV` 只用于鉴别 NodeJS 运行,与你的业务环境无关。 - 推荐你总是使用 `ENV` 来鉴别当前的环境。 对于每个环境的数据设置,可以参考如下: - **在开发环境中** (`ENV=development`):自动从文件 `configs/constants/development.ts` 读取配置。 - **在生产环境中** (`ENV=production`): 自动从文件 `configs/constants/production.ts` 读取配置。 - **任何环境**: 如果 `.env` 文件内存在同名常量,会覆盖上述 2 个环境配置文件。优先级最高。
### 文档参考 - [routing-controllers](https://github.com/typestack/routing-controllers) - [Prisma](https://www.prisma.io/docs/concepts)
### LICENSE [MIT](./LICENSE)