Skip to content

Sample Typescript Express starter API project with jest and mongoose

Notifications You must be signed in to change notification settings

fyelci/typescript-express-starter-boilerplate

Repository files navigation

Build Status

TypeScript Express Starter Boilerplate

This repo is a sample api service to use typescript, express, mongodb. It comes bundled with Docker and is CI/CD optimized. The development environment uses docker-compose to start dependent services like mongo.

A few things to note in the project:

  • Terraform - Terraform file to deploy app to AWS ECS with cluster, service, task definitions. ECR definition and Load balancer creation.
  • Dockerfile - Dockerfile to generate docker builds.
  • docker-compose - Docker compose script to start service in production mode.
  • Containerized Mongo for development - Starts a local mongo container with data persistence across runs.
  • Mongo Connection Helper - A helper class to connect to MongoDB reliably.
  • Middleware for easier async/await - Catches errors from routes and throws them to express error handler to prevent app crash due to uncaught errors.
  • OpenAPI 3.0 Spec - A starter template to get started with API documentation using OpenAPI 3.0. This API spec is also available when running the development server at http://localhost:3001/api/dev/api-docs
  • .env file for configuration - Change server config like app port, mongo url etc
  • Winston Logger - Uses winston as the logger for the application.
  • ESLINT - ESLINT is configured for linting.
  • Jest - Using Jest for running unit and integration test cases
  • Travis CI - Pre-configured to a sample Travis CI pipepline for linting, building and running the test suite.

Installation

1. Clone this repo

$ git clone [email protected]:fyelci/typescript-express-starter-boilerplate.git your-app-name
$ cd your-app-name

2. Install dependencies

$ npm i

Development

Start dev server

Starting the dev server also starts MongoDB as a service in a docker container using the compose script at docker-compose.dev.yml.

$ npm run dev

Running the above commands results in

  • API Server running at http://localhost:3001
  • Swagger UI at http://localhost:3001/api/dev/api-docs
  • MongoDB running at mongodb://localhost:27017

Packaging and Deployment

1. Run with docker-compose

$ docker-compose up

2. Run with docker

$ docker build -t api-server .
$ docker run -t -i -p 3001:3001 api-server

3. Build and run

$ npm run build && npm run start

Environment

To edit environment variables, create a file with name .env and copy the contents from .env.default to start with.

Var Name Type Default Description
NODE_ENV string development API runtime environment. eg: staging
PORT number 3001 Port to run the API server on
MONGO_URL string mongodb://localhost:27017/posts URL for MongoDB

Logging

The application uses winston as the default logger. The configuration file is at src/logger.ts.

  • All logs are saved in ./logs directory and at /logs in the docker container.
  • The docker-compose file has a volume attached to container to expose host directory to the container for writing logs.
  • Console messages are prettified
  • Each line in error log file is a stringified JSON.