The best practice of building Koa2 with TypeScript. 中文
-
Run
npm init koa-ts -
Install dependencies:
yarn -
Rename
.env.exampleto.env, and runprisma db pushto synchronize the data model -
Start the server:
yarn dev. visit: http://127.0.0.1:3000/apis/sessions
(Optional) the project has built-in a docker compose, run
yarn dev:dbto run database automatic.
├── app
│ ├── controllers --- server controllers
│ ├── helpers --- helper func (interceptor / error handler / validator...)
│ ├── jobs --- task (periodic task / trigger task / email server...)
│ ├── entities --- database entities/models
│ └── services --- adhesive controller and model
├── config
│ ├── constants --- environment variable
│ ├── koa.middlewares --- middlewares for Koa
│ ├── routing.middlewares --- middlewares for Routing Controller
│ ├── routing.options --- configs for Routing Controller
│ ├── bootstrap --- lifecycle
│ └── interceptors --- global interceptor
│ └── utils --- pure functions for help
└── test --- utils for testcase
├── .env --- environment file
-
Separation configuration and business logic.
-
Export scheme model and interface, follow style of TypeScript.
-
Test cases and lint configuration.
-
The best practice for Dependency Injection in Koa project.
-
Get constraints on your data model with Prisma.
-
TypeScript hotload.
-
app.ts-> collect env varsconstants-> collect env filesvariables.env -
envs ready, call
bootstrap.before() -
lift
routing-controllers-> lift Koa middlewares -> registerContainerfor DI -
start Koa & invoke
bootstrap.after()after startup
The project uses Prisma as the intelligent ORM tool by default. Supports PostgreSQL, MySQL and SQLite.
- You can change the data type and connection method in the
.envfile - After each modification to file
/prisma/schema.prisma, you need to runprisma migrate devto migrate the database. - After each modification to file
/prisma/schema.prisma, you need to runprisma generateto sync types.
When nodejs is running, ENV does not mean NODE_ENV:
- After NodeJS project is built, we always run it as
NODE_ENV=PRODUCTION, which may affect some framework optimizations. NODE_ENVonly identifies the NodeJS runtime, independent of the business.- You should use
ENVto identify the environment.
For the data settings of each environment, you can refer to the following:
-
Development Mode (
ENV=development): read configurations fromconfigs/constants/development.tsfile, but it will still be overwritten by.envfile. -
Production Mode (
ENV=production): read configurations fromconfigs/constants/production.tsfile, but it will still be overwritten by.envfile.
This project is licensed under the MIT License. See the LICENSE file for more info.