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
- Express + MongoDB (Mongoose)
- Consistent coding styles with editorconfig
- Docker support
- Uses helmet to set some HTTP headers for security
- Load environment variables from .env files with dotenv
- Request validation with joi
- Gzip compression with compression
- Linting with eslint
- Tests with mocha, chai and sinon
- Code coverage with istanbul and coveralls
- Git hooks with husky
- Logging with morgan
- Authentication and Authorization with passport
- API documentation geratorion with apidoc
- Continuous integration support with travisCI
- Monitoring with pm2
Requirements
- Node v7.6+ or Docker
- Yarn
Getting Started
Clone the repo and make it yours:
git clone --depth 1 https://github.com/danielfsousa/express-rest-es2017-boilerplatecd express-rest-es2017-boilerplaterm -rf .git
Install dependencies:
yarn
Set environment variables:
cp .env.example .env
Running Locally
yarn dev
Running in Production
yarn start
Lint
# lint code with ESLint yarn lint # try to fix ESLint errors yarn lint:fix # lint and watch for changes yarn lint:watch
Test
# 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
# run lint and tests yarn validate
Logs
# show logs in production pm2 logs
Documentation
# generate and open api documentation yarn docs
Docker
# run container locally yarn docker:devordocker-compose -f docker-compose.yml -f docker-compose.dev.yml up # run container in production yarn docker:prodordocker-compose -f docker-compose.yml -f docker-compose.prod.yml up # run tests yarn docker:testordocker-compose -f docker-compose.yml -f docker-compose.test.yml up
Deploy
Set your server ip:
DEPLOY_SERVER=127.0.0.1
Replace my Docker username with yours:
nano deploy.sh
Run deploy script:
yarn deployorsh ./deploy.sh