Starter application for building APIs with Express.js
Check out the working demo 👉 here.
Comes with:
- ES6 features/modules
- ES7 async/await
- Bookshelf ORM and Knex migrations
- PostgreSQL (default) with support for MySQL and SQLite
- API documentation using swagger-ui-dist and swagger-jsdoc
- Docker support for Development and Production
- ESLint for code linting
- Request validation using Joi
- Code formatting using Prettier
- Configuration management using dotenv
- Logging using winston
- Error reporting using Sentry
- Tests using mocha, supertest and chai
Clone the repository, install the dependencies and get started right away.
$ git clone --depth=1 git@github.com:mesaugat/express-api-es6-starter.git <application-name>
$ cd <application-name>
$ rm -rf .git
$ yarn # or npm install
Make a copy of .env.example
as .env
and update your application details and database credentials. Now, run the migrations and seed the database.
$ yarn migrate
$ yarn seed
Finally, start the application.
$ yarn start:dev (For development)
$ NODE_ENV=production yarn start (For production)
Navigate to http://localhost:8848/api-docs/ to verify installation.
These are the commands to create a new migration and corresponding seed file.
$ yarn make:migration <name>
$ yarn make:seeder <name>
Example,
$ yarn make:migration create_tags_table
$ yarn make:seeder 02_insert_tags
Use docker-compose to quickly bring up a stack with pre-configured Postgres database container. Data is ephemeral and containers will disappear when stack is removed.
Specific configuration for Docker is in .env.docker
0.0.0.0
as$APP_HOST
to expose app on Docker network interface- Pre-configured Postgres settings - can be updated to point to another Postgres host
Bring up stack,
$ docker-compose up
Navigate to http://localhost:8848/api-docs/ to verify application is running from docker.
Bring down stack,
$ docker-compose down
There are multiple build targets available for different stages. These images can be used to deploy or run jobs in different container based cloud infrastructure like Kubernetes, AWS ECS, Fargate, GCP Cloud Run etc.
-
Building a production image.
$ docker build --target=prod -t express-api-es6-starter:prod .
-
Building an image for development.
$ docker build --target=dev -t express-api-es6-starter:dev .
-
Building an image that runs migration and/or rollback.
# Docker image that runs migration and seeds. $ docker build --target=migrate -t express-api-es6-starter:migrate . # Docker image that rollbacks migrations. $ docker build --target=migrate-rollback -t express-api-es6-starter:migrate-rollback .
Once the images have been built - all you need to do is run them providing a .env
file. Like this:
$ docker run -v "/path/to/your/.env:/app/.env" mesaugat/express-api-es6-starter:migrate
Install the mysql driver first.
$ yarn add mysql
Update these lines in your .env
file.
- DB_CLIENT='pg'
+ DB_CLIENT='mysql'
- DB_PORT='5432'
+ DB_PORT='3306'
You can remove the pg driver if you like to.
$ yarn remove pg
That's it, you are ready to roll.
To run the tests you need to create a separate test database. Don't forget to update your .env
file to include the connections for test database.
$ NODE_ENV=test yarn migrate
$ yarn test
Run tests with coverage.
$ yarn test:coverage
Because the highest point in the world is 8848 metres.
For contribution and feature requests, please create an issue first.
express-api-es6-starter is under MIT License.