$ git clone https://github.com/Tandemly/eos-api-service.git
$ cd eos-api-service
$ cp .env.example .env
The API services are configured through a local .env
file. The standard setup is as follows:
NODE_ENV=development
PORT=8888
JWT_SECRET=bA2xcjpf8y5aSUFsNB2qN5yymUBSs6es3qHoFpGkec75RCeBb8cpKauGefw5qy4
JWT_EXPIRATION_MINUTES=60
MONGO_URI=mongodb://eosdemo:[email protected]:11336/eos-demo
MONGO_URI_TESTS=mongodb://apiuser:[email protected]:27105/api-service-test
EOSD_CONNECTOR_URI=https://demo-eos-deployment-mrvbxqxaro.now.sh
EOSD_CONNECTOR_TEST_URI=http://localhost:8888
You can set the NODE_ENV
to which ever environment you're running in (production
or development
) and the port. Because the
API Service uses JWT (JSON Web Tokens) for authentication/authorization, you'll need to set a JWT_SECRET
and a JWT_EXPIRATION_MINUTES
.
Ensure any secret you use is sufficiently long and random (you can use md5, sha256, et al) to generate one.
The MONGO_URI
should point to the same mongodb host that the particular eosd ndoe you are connecting to is writing out to. That
eosd node and the api service share this datbase. The _TESTS_URI
environments are only used in test
environment builds on Travis.
Once configured, you can get the API Service up and running using the following:
$ yarn
$ yarn docs
$ yarn start
Running yarn start
will run the service using pm2 and with NODE_ENV=production
. The command yarn docs
generates the API documentation
which is available from the running API service at /v1/docs
. You can get a simple status of the API service by performing a GET
on the
/v1/status
endpoint which should return a 200 Ok.
Boilerplate/Generator/Starter Project for building RESTful APIs and microservices using Node.js, Express and MongoDB
- 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
- Node v7.6+ or Docker
- Yarn
Clone the repo and make it yours:
git clone --depth 1 https://github.com/danielfsousa/express-rest-es2017-boilerplate
cd express-rest-es2017-boilerplate
rm -rf .git
Install dependencies:
yarn
Set environment variables:
cp .env.example .env
yarn dev
yarn start
# lint code with ESLint
yarn lint
# try to fix ESLint errors
yarn lint:fix
# lint and watch for changes
yarn lint:watch
# 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
# run lint and tests
yarn validate
# show logs in production
pm2 logs
# generate and open api documentation
yarn docs
# run container locally
yarn docker:dev
or
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
# run container in production
yarn docker:prod
or
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
# run tests
yarn docker:test
or
docker-compose -f docker-compose.yml -f docker-compose.test.yml up