This template can be used as a feature complete server application. Then you can directly develop and not be doing configurations for hours ;)
If you got any feedback, I'm open to suggestions
Inspired by some awesome templates from awesome people w3tecch and mikro-orm
Made with love by blanquartf
- API Testing with included e2e testing.
- Dependency Injection done with the nice framework from TypeDI.
- Simplified Database Query with the ORM mikro-orm.
- Clear Structure with different layers such as controllers, services, repositories, models, middlewares...
- Easy Exception Handling thanks to routing-controllers.
- Smart Validation thanks to class-validator with some nice annotations.
- API Documentation thanks to swagger and routing-controllers-openapi.
- API Monitoring thanks to express-status-monitor.
- Integrated Testing Tool thanks to Jest.
- E2E API Testing thanks to supertest.
- Basic Security Features thanks to Helmet.
- Fast Database Building with simple migration from mikro-orm.
- Easy Data Seeding with our own factories.
- Getting Started
- Scripts and Tasks
- Debugger in VSCode
- API Routes
- Project Structure
- Logging
- Further Documentations
- License
You need to set up your development environment before you can do anything.
Install Node.js and NPM
- on OSX use homebrew
brew install node - on Windows use chocolatey
choco install nodejs
Install yarn globally
npm install yarn -gInstall a Postgresql database.
If you work with a mac, we recommend to use homebrew for the installation.
Fork or download this project. Configure your package.json for your new project.
Then copy the .env.example file and rename it to .env. In this file you have to add your database connection information.
Then copy the .env.test.example file and rename it to .env. In this file you have to add your e2e testing database connection information.
Create new databases with the name you have in your .env-files.
Then setup your application environment.
yarn installThis installs all dependencies with yarn.
Go to the project dir and start your app with this yarn script.
yarn devThis starts a local server using
nodemon, which will watch for any file changes and will restart the server according to these changes. The server address will be displayed to you ashttp://0.0.0.0:3000.
All script are defined in the package.json file.
- Install all dependencies with
yarn install
- Run code quality analysis using
yarn lint. This runs tslint. - There is also a vscode task for this called
lint.
- Run the unit tests using
yarn test.
- Run
yarn devto start nodemon with ts-node, to serve the app. - The server address will be displayed to you as
http://0.0.0.0:3000
- Run
yarn buildto generated all JavaScript files from the TypeScript sources (There is also a vscode task for this calledbuild). - To start the builded app located in
distuseyarn start.
- Run
yarn mikro-orm migration:upto execute migrations and setup the database
To debug your code run yarn dev:debug
Then, just set a breakpoint and hit F5 in your Visual Studio Code.
The route prefix is /api/v1 by default, but you can change this in the .env file.
The swagger and the monitor route can be altered in the .env file.
| Route | Description |
|---|---|
| /swagger | This is the Swagger UI with our API documentation |
| /monitor | Shows a small monitor page for the server |
| /api/v1/users | Example entity endpoint |
| Name | Description |
|---|---|
| .vscode/ | VSCode tasks for debugging |
| dist/ | Compiled source files will be placed here |
| logs/ | The logs will be placed here |
| src/ | Source files |
| src/api/controllers/ | REST API Controllers |
| src/api/interceptors/ | Interceptors are used to change or replace the data returned to the client. |
| src/api/middlewares/ | Express Middlewares like helmet security features |
| src/api/models/ | Models for communicating with server |
| src/core/initializers | The core initializers like logger and env variables |
| src/core/middleware | The core express middlewares like error handling |
| src/core/services | The core services |
| src/database/migrations | Database migration scripts |
| src/database/entities | Database entities |
| test/integration/ | Integration test with Postgresql |
| .env.example | Environment configurations |
| .env.test.example | Test environment configurations |
Our logger is winston. I created a simple service for injecting the logger in your app (see example below).
import LogService from '../../core/services/LogService';
@Service()
export class UserService {
constructor(
public logger: LogService
) { }
...| Name & Link | Description |
|---|---|
| Express | Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications. |
| TypeDI | Dependency Injection for TypeScript. |
| routing-controllers | Create structured, declarative and beautifully organized class-based controllers with heavy decorators usage in Express / Koa using TypeScript and Routing Controllers Framework. |
| Mikro-Orm | Mikro-Orm is an ORM based on query builder knex. |
| class-validator | Validation made easy using TypeScript decorators. |
| class-transformer | Proper decorator-based transformation / serialization / deserialization of plain javascript objects to class constructors |
| Helmet | Helmet helps you secure your Express apps by setting various HTTP headers. It’s not a silver bullet, but it can help! |
| Mocha | Delightful JavaScript Testing Library for unit and e2e tests |
| supertest | Super-agent driven library for testing node.js HTTP servers using a fluent API |
| swagger Documentation | API Tool to describe and document your api. |