Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mkosir/typeorm-express-typescript
💊 Minimal Express RESTful API boilerplate. Spin it up with single command. TypeScript, TypeORM, Postgres, Docker.
https://github.com/mkosir/typeorm-express-typescript
boilerplate docker docker-compose express express-boilerplate jwt mocha nodejs postgres rest-api typeorm typescript
Last synced: 28 days ago
JSON representation
💊 Minimal Express RESTful API boilerplate. Spin it up with single command. TypeScript, TypeORM, Postgres, Docker.
- Host: GitHub
- URL: https://github.com/mkosir/typeorm-express-typescript
- Owner: mkosir
- License: mit
- Created: 2020-06-09T15:18:53.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2022-10-14T06:23:08.000Z (about 2 years ago)
- Last Synced: 2024-10-01T05:19:30.142Z (about 1 month ago)
- Topics: boilerplate, docker, docker-compose, express, express-boilerplate, jwt, mocha, nodejs, postgres, rest-api, typeorm, typescript
- Language: TypeScript
- Homepage:
- Size: 1.2 MB
- Stars: 422
- Watchers: 8
- Forks: 136
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# TypeORM / Express / TypeScript RESTful API boilerplate
[![CI][build-badge]][build-url]
[![TypeScript][typescript-badge]][typescript-url]
[![prettier][prettier-badge]][prettier-url]
![Heisenberg](misc/heisenberg.png)Boilerplate with focus on best practices and painless developer experience:
- Minimal setup that can be extended 🔧
- Spin it up with single command 🌀
- TypeScript first
- RESTful APIs
- JWT authentication with role based authorization## Requirements
- [Node v16+](https://nodejs.org/)
- [Docker](https://www.docker.com/)## Running
_Easily set up a local development environment with single command!_
- clone the repo
- `npm run docker:dev` 🚀Visit [localhost:4000](http://localhost:4000/) or if using Postman grab [config](/postman).
### _What happened_ 💥
Containers created:
- Postgres database container seeded with 💊 Breaking Bad characters in `Users` table (default credentials `user=walter`, `password=white` in [.env file](./.env))
- Node (v16 Alpine) container with running boilerplate RESTful API service
- and one Node container instance to run tests locally or in CI## Features:
- [Express](https://github.com/expressjs/express) framework
- [TypeScript v4](https://github.com/microsoft/TypeScript) codebase
- [TypeORM](https://typeorm.io/) using Data Mapper pattern
- [Docker](https://www.docker.com/) environment:
- Easily start local development using [Docker Compose](https://docs.docker.com/compose/) with single command `npm run docker:dev`
- Connect to different staging or production environments `npm run docker:[stage|prod]`
- Ready for **microservices** development and deployment.
Once API changes are made, just build and push new docker image with your favourite CI/CD tool
`docker build -t /api-boilerplate:latest .`
`docker push /api-boilerplate:latest`
- Run unit, integration (or setup with your frontend E2E) tests as `docker exec -ti be_boilerplate_test sh` and `npm run test`
- Contract first REST API design:
- never break API again with HTTP responses and requests payloads using [type definitions](./src/types/express/index.d.ts)
- Consistent schema error [response](./src/utils/response/custom-error/types.ts). Your frontend will always know how to handle errors thrown in `try...catch` statements 💪
- JWT authentication and role based authorization using custom middleware
- Set local, stage or production [environmental variables](./config) with [type definitions](./src/types/ProcessEnv.d.ts)
- Logging with [morgan](https://github.com/expressjs/morgan)
- Unit and integration tests with [Mocha](https://mochajs.org/) and [Chai](https://www.chaijs.com/)
- Linting with [ESLint](https://eslint.org/)
- [Prettier](https://prettier.io/) code formatter
- Git hooks with [Husky](https://github.com/typicode/husky) and [lint-staged](https://github.com/okonet/lint-staged)
- Automated npm & Docker dependency updates with [Renovate](https://github.com/renovatebot/renovate) (set to patch version only)
- Commit messages must meet [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) format.
After staging changes just run `npm run commit` and get instant feedback on your commit message formatting and be prompted for required fields by [Commitizen](https://github.com/commitizen/cz-cli)## Other awesome boilerplates:
Each boilerplate comes with it's own flavor of libraries and setup, check out others:
- [Express and TypeORM with TypeScript](https://github.com/typeorm/typescript-express-example)
- [Node.js, Express.js & TypeScript Boilerplate for Web Apps](https://github.com/jverhoelen/node-express-typescript-boilerplate)
- [Express boilerplate for building RESTful APIs](https://github.com/danielfsousa/express-rest-es2017-boilerplate)
- [A delightful way to building a RESTful API with NodeJs & TypeScript by @w3tecch](https://github.com/w3tecch/express-typescript-boilerplate)[build-badge]: https://github.com/mkosir/express-typescript-typeorm-boilerplate/actions/workflows/main.yml/badge.svg
[build-url]: https://github.com/mkosir/express-typescript-typeorm-boilerplate/actions/workflows/main.yml
[typescript-badge]: https://badges.frapsoft.com/typescript/code/typescript.svg?v=101
[typescript-url]: https://github.com/microsoft/TypeScript
[prettier-badge]: https://img.shields.io/badge/code_style-prettier-ff69b4.svg
[prettier-url]: https://github.com/prettier/prettier## Contributing
All contributions are welcome!