# Express ES2017 REST API Boilerplate Boilerplate/Generator/Starter Project for building RESTful APIs and microservices using Node.js, Express and MongoDB ## Features - No transpilers, just vanilla javascript - ES2017 latest features like Async/Await - CORS enabled - Uses [yarn](https://yarnpkg.com) - Express + MongoDB ([Mongoose](http://mongoosejs.com/)) - Consistent coding styles with [editorconfig](http://editorconfig.org) - [Docker](https://www.docker.com/) support - Uses [helmet](https://github.com/helmetjs/helmet) to set some HTTP headers for security - Load environment variables from .env files with [dotenv](https://github.com/rolodato/dotenv-safe) - Request validation with [joi](https://github.com/hapijs/joi) - Gzip compression with [compression](https://github.com/expressjs/compression) - Linting with [eslint](http://eslint.org) - Tests with [mocha](https://mochajs.org), [chai](http://chaijs.com) and [sinon](http://sinonjs.org) - Code coverage with [istanbul](https://istanbul.js.org) and [coveralls](https://coveralls.io) - Git hooks with [husky](https://github.com/typicode/husky) - Logging with [morgan](https://github.com/expressjs/morgan) - Authentication and Authorization with [passport](http://passportjs.org) - API documentation generation with [apidoc](http://apidocjs.com) - Continuous integration support with [travisCI](https://travis-ci.org) - Monitoring with [pm2](https://github.com/Unitech/pm2) ## Requirements - [Node v7.6+](https://nodejs.org/en/download/current/) or [Docker](https://www.docker.com/) - [Yarn](https://yarnpkg.com/en/docs/install) ## Getting Started #### Clone the repo and make it yours: ```bash git clone --depth 1 https://git.sentientgeeks.us/krish/sg-node-express-rest-api.git cd sg-node-express-rest-api rm -rf .git ``` #### Install dependencies: ```bash yarn ``` #### Set environment variables: ```bash cp .env.example .env ``` ## Running Locally ```bash yarn dev ``` ## Running in Production ```bash yarn start ``` ## Lint ```bash # lint code with ESLint yarn lint # try to fix ESLint errors yarn lint:fix # lint and watch for changes yarn lint:watch ``` ## Test ```bash # run all tests with Mocha yarn test # run unit tests yarn test:unit # run integration tests yarn test:integration # run all tests and watch for changes yarn test:watch # open nyc test coverage reports yarn coverage ``` ## Validate ```bash # run lint and tests yarn validate ``` ## Logs ```bash # show logs in production pm2 logs ``` ## Documentation ```bash # generate and open api documentation yarn docs ``` ## Docker ```bash # run container locally yarn docker:dev # run container in production yarn docker:prod # run tests yarn docker:test ``` ## Deploy Set your server ip: ```bash DEPLOY_SERVER=127.0.0.1 ``` Replace my Docker username with yours: ```bash nano deploy.sh ``` Run deploy script: ```bash yarn deploy ```