154 lines
2.9 KiB
Markdown
154 lines
2.9 KiB
Markdown
# 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
|
|
```
|
|
|