An open API service indexing awesome lists of open source software.

https://github.com/systangotechnologies/koach-javascript

Production ready Koa2 boilerplate.
https://github.com/systangotechnologies/koach-javascript

es2017 koa koa-boilerplate koa2 koajs nodejs

Last synced: 14 days ago
JSON representation

Production ready Koa2 boilerplate.

Awesome Lists containing this project

README

        

![KOACH](https://github.com/SystangoTechnologies/Koach/blob/master/static/koach.png)

## KOACH
Production ready boilerplate for building APIs with [koa2](https://github.com/koajs/koa/) using mongodb as the database and http/2 as the communication protocol.

## Description
This project covers basic necessities of most APIs.
* Authentication (passport & jwt)
* Database (mongoose)
* Testing (mocha)
* http/2 support for websites and apis
* Doc generation with apidoc
* linting using standard
* Contains two versions of API

Please note, if you are planning to use this boilerplate for creating a web application then the 'https' protocol should be used to access its pages.

Visit `https://localhost:3000/` to access the root page.

## Requirements
* node = v10.15.3
* MongoDB

## .env Configuration
To simulate environment variables in Dev environment, please create .env file at the root location and define the following properties -

```
NODE_ENV=production // Node environment development/production
PORT=8000 // Server Port
SESSION=0.0.0.0 // secret-boilerplate-token
JWT_SECRET=This_Should_be_32_characters_long // Jwt secret
DATABASE_URL=mongodb://localhost:27017/koach-dev // Mongo database url
#DATABASE_URL=mongodb://mongodb:27017/koach-dev // Mongo database url while using docker
DB_PATH=/home/ulap28/work/systango-frameworks // path where database volumen mounted.

## Installation
```bash
git clone https://github.com/SystangoTechnologies/Koach.git
```

## Features
* [koa2](https://github.com/koajs/koa)
* [koa-router](https://github.com/alexmingoia/koa-router)
* [koa-bodyparser](https://github.com/koajs/bodyparser)
* [koa-generic-session](https://github.com/koajs/generic-session)
* [koa-logger](https://github.com/koajs/logger)
* [koa-helmet](https://github.com/venables/koa-helmet)
* [koa-convert](https://github.com/koajs/convert)
* [MongoDB](http://mongodb.org/)
* [Mongoose](http://mongoosejs.com/)
* [http/2](https://github.com/molnarg/node-http2)
* [Passport](http://passportjs.org/)
* [Nodemon](http://nodemon.io/)
* [Mocha](https://mochajs.org/)
* [apidoc](http://apidocjs.com/)
* [Babel](https://github.com/babel/babel)
* [ESLint](http://eslint.org/)
* [PM2](https://github.com/Unitech/pm2/)
* [Swagger](https://github.com/SystangoTechnologies/swagger-generator-koa/blob/master/README.md)

## Structure
```
├── bin
│ └── server.js # Bootstrapping and entry point
├── cert
│ ├── server.cert # SSL certificate
│ └── server.key # SSL certificate key
├── config # Server configuration settings
│ ├── env # Environment specific config
│ │ ├── common.js
│ │ ├── development.js
│ │ ├── production.js
│ │ └── test.js
│ ├── index.js # Config entrypoint
│ └── passport.js # Passportjs config of strategies
├── src # Source code
│ ├── modules # Module-specific controllers
│ │ ├── common # Contains common modules
│ │ │ ├─── home
│ │ │ └─ index.js
│ │ ├── v1 # Version 1 of APIs
│ │ │ ├─ Auth
│ │ │ ├─ User
│ │ │ └─ index.js
│ │ └─── v2 # Version 2 of APIs
│ │ ├─ Auth
│ │ ├─ User
│ │ └─ index.js
│ ├── models # Mongoose models
| ├── requestModel
| | ├── v1
| | | ├── auth.js
| | | └── users.js
| | └── v2
| | ├── auth.js
| | └── users.js
| ├── responseModel
| | ├── v1
| | | ├── auth.js
| | | └── users.js
| | └── v2
| | ├── auth.js
| | └── users.js
│ └── middleware # Custom middleware
│ └── validators # Validation middleware
└── test # Unit tests
└── pm2.config.js # PM2 configuration file
└── Dockerfile # Docker file
└── docker-compose.yml # Docker Compose file
```

## Usage
* `npm start` Start server on development mode with Nodemon
* `npm run prod` Start server on production mode with PM2
* `npm run docs` Generate API documentation
* `npm test` Run mocha tests

## Running the server in Docker Container

Prerequisite For Docker Configuration : Docker and docker compose must be installed on the system.

Steps to run app in docker container :
1. CD to project dir
2. Create build using cmd: $ docker-compose build
3. Start the server in daemon thread using cmd: $ docker-compose up -d
4. Stop the server using cmd : $ docker-compose down

## Documentation
API documentation is written inline and generated by [apidoc](http://apidocjs.com/).

Visit [https://localhost:3000/docs/](https://localhost:3000/docs/) to view docs

To view swagger API documentation

Visit [https://localhost:3000/swagger](https://localhost:3000/swagger) to view Swagger UI.

## Performance Comparison
The environment for the test cases are following-
* Node Version: **8.9.4**
* Number of Users: **1500**
* Ramp-up Period: **300 seconds**
* Loop Count: **100**

![Average](https://raw.githubusercontent.com/SystangoTechnologies/Koach/master/static/Average.png)
![Throughput](https://github.com/SystangoTechnologies/Koach/raw/master/static/Throughput.png)

## Contributors
[Arpit Khandelwal](https://github.com/arpit-systango)
[Anurag Vikram Singh](https://www.linkedin.com/in/anuragvikramsingh/)
[Vikas Patidar](https://www.linkedin.com/in/vikas-patidar-0106/)
[Sparsh Pipley](https://www.linkedin.com/in/sparsh-pipley-6ab0b1a4/)

## License
MIT.