Skip to content

borjapazr/express-typescript-skeleton

Repository files navigation

Node.js, Typescript and Express template

GitHub package.json version GitHub CI Workflow Status GitHub CD Workflow Status GitHub LICENSE

πŸ”°πŸ¦Έ Production-ready template for backends created with Node.js, Typescript and Express

ℹ️ About β€’ πŸ“‹ Features β€’ 🀝 Contributing β€’ πŸ›£οΈ Roadmap β€’ 🎯 Credits β€’ 🚩 License


ℹ️ About

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.

πŸš€ Quick start

  • 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

πŸ“‹ Features

  • 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 πŸ›Έ

🐐 Makefile rules

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

⚑ Scripts

package.json scripts:

  • dev: Start project in development mode
  • build: Build project and generate final build
  • start: Start project in production mode
  • check:types: Check if project types are correct
  • check:format: Check if project is formatted correctly
  • check:lint: Check if project is linted correctly
  • check:packagejson: Check if project package.json is correct
  • check:markdown: Check if markdown files are correct
  • check:spelling: Check if project is spelled correctly
  • fix:format: Fix project format issues
  • fix:lint: Fix project lint issues
  • fix:staged: Check and fix staged files
  • test: Run all tests
  • test:unit: Run unit tests
  • test:int: Run integration tests
  • test:e2e: Run e2e tests
  • test:watch: Run tests in watch mode
  • test:coverage: Run tests with coverage
  • coverage:view: Show coverage information
  • commit: Help to commit changes using conventional commits
  • version: Generate new project version
  • reset-hard: Reset git repository to a clean state
  • prepare-release: Prepare the project for a release and generates a new release
  • update-deps: Update the project dependencies

🀝 Contributing

Just fork and open a pull request. All contributions are welcome πŸ€—

πŸ›£οΈ Roadmap

Please, check TODO for the current roadmap.

🎯 Credits

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.

⭐ Stargazers

Stargazers repo roster for @borjapazr/express-typescript-skeleton

🚩 License

MIT @ borjapazr. Please see License for more information.