The main goal of this project is to provide a base template for the generation of a production-ready REST API made with Node.js
, Express
and Typescript
. The idea is to avoid having to configure all the tools involved in a project every time it is started and thus be able to focus on the definition and implementation of the business logic.
📣 This is an opinionated template. The architecture of the code base and the configuration of the different tools used has been based on best practices and personal preferences.
-
Install dependencies:
npm install # or make install
-
Start database container:
make start/db
-
Start cache container:
make start/cache
-
Generate Prisma Client:
npm run prisma:generate
-
Start project in development mode:
npm run dev
-
Start project in production mode:
npm run start
-
Open the following URL to interact with the API using Swagger UI:
http://localhost:5000/api/docs # Sample username and password: janedoe / 123456
- Built using Typescript
- Built using Express Framework: Fast, unopinionated, minimalist web framework for node.
- Built using Prisma: Next-generation ORM for Node.js & TypeScript | PostgreSQL, MySQL, MariaDB, SQL Server, SQLite & MongoDB
- Built using Ts.ED: Ts.ED is a Node.js Framework on top of Express/Koa.js. Written in Typescript, it helps you build your server-side application easily and quickly. If you want to start a complete out-of-the-box project or fully customize it yourself, Ts.ED will guide you there!
- JWT authentication and role based authorization using custom middleware
- OpenAPI definition
- Fully configured logger with Pino
- Unit, Integration and E2E tests using Jest and Supertest
- Linting with ESLint
- Formatting with Prettier
- Spell check
- Git hooks with Husky and lint-staged
- Containerised using Docker and Docker Compose
- Path aliases support
- Commit messages must meet conventional commits format
- GitHub Actions
- Makefile as project entrypoint
- PostgreSQL as database
- Redis as cache engine
- A lot of emojis 🛸
The main actions on this project are managed using a Makefile as an entrypoint.
Usage: make TARGET [ARGUMENTS]
Targets:
build/docker Build Docker image of the application
clean/docker Clean all container resources
help Show this help
install Install the project
logs Show logs for all or c=<name> containers
requirements Check if the requirements are satisfied
start Start application in development mode
start/docker Start application in a Docker container
start/docker/cache Start cache container
start/docker/db Start database container
stop/docker Stop application running in a Docker container
stop/docker/cache Stop cache container
stop/docker/db Stop database container
package.json scripts:
dev
: Start project in development modebuild
: Build project and generate final buildstart
: Start project in production modecheck:types
: Check if project types are correctcheck:format
: Check if project is formatted correctlycheck:lint
: Check if project is linted correctlycheck:packagejson
: Check if project package.json is correctcheck:markdown
: Check if markdown files are correctcheck:spelling
: Check if project is spelled correctlyfix:format
: Fix project format issuesfix:lint
: Fix project lint issuesfix:staged
: Check and fix staged filestest
: Run all teststest:unit
: Run unit teststest:int
: Run integration teststest:e2e
: Run e2e teststest:watch
: Run tests in watch modetest:coverage
: Run tests with coveragecoverage:view
: Show coverage informationcommit
: Help to commit changes using conventional commitsversion
: Generate new project versionreset-hard
: Reset git repository to a clean stateprepare-release
: Prepare the project for a release and generates a new releaseupdate-deps
: Update the project dependencies
Just fork and open a pull request. All contributions are welcome 🤗
Please, check TODO for the current roadmap.
To implement this project I have based myself on many similar projects. There were countless of them and I gave them all a star.
🙏 Thank you very much for these wonderful creations.