The best practice of building Koa2 with TypeScript. 中文
This layout requires NodeJS v12+
-
Run
npm init koa-ts. -
Install dependencies:
yarnornpm i. -
Start the server:
yarn devornpm dev. visit: http://127.0.0.1:3000/apis/sessions
(Optional) if you need database, set useDatabase to true.(in
configs/customs.ts).
(Optional) the project has built-in a docker-compose, run
npm run mongolift mongodb 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
│ ├── environments --- environment variable
│ ├── koa.middlewares --- middlewares for Koa
│ ├── routing.middlewares --- middlewares for Routing Controller
│ ├── routing.options --- configs for Routing Controller
│ ├── connection --- database connection
│ ├── bootstrap --- lifecycle
│ ├── customs --- user settings
│ └── interceptors --- global interceptor
│ └── utils --- pure functions for help
└── test --- utils for testcase
├── variables.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.
-
Deploy by ncc.
-
TypeScript hotload.
-
app.ts-> collect env varsenvironments-> collect env filesvariables.env -
envs ready, call
bootstrap.before() -
configs/connection.tsconnecting external services (e.g. DB / Redis...) -
lift
routing-controllers-> lift Koa middlewares -> registerContainerfor DI -
start Koa & invoke
bootstrap.after()after startup -
configs/connection.tsconnected -> invokebootstrap.connected()
You can link multiple databases (mysql / mongo etc.), each database can link configurations of multiple environments:
- The database will load the configs of
ormconfig.jsfile. - You can specify link configs of multiple environments under folder
configs/environments. - You can specify encrypted information in file
variables.env. It is not recommended to add filevariables.envto version control. - You can still manually set
process.envto override all environment variables.
-
Development Mode (
NODE_ENV=development): read configurations fromconfigs/environments/development.tsfile, but it will still be overwritten byvariables.envfile. -
Production Mode (
NODE_ENV=production): read configurations fromconfigs/environments/production.tsfile, but it will still be overwritten byvariables.envfile.
This project is licensed under the MIT License. See the LICENSE file for more info.