This project is meant to proof the concept of microservices architecture using an archetype as a basis for each particular microservice.
This project uses the following environment variables:
Name | Description |
---|---|
API_PORT | Defines on which port will express app listen |
API_TOKEN | Token used for authorization to API |
RATE_LIMIT_MAX | Defines how many requests per time frame can be send |
RATE_LIMIT_WINDOW | Defines rate limiting time frame (in ms) |
LOG_LEVEL | Defines logging level |
LOG_PATH | Defines directory to which are logs saved (relative path to root) |
LOG_KEEP_INTERVAL | Defines how log are logs kept untill they are overwritten (possible values: xh -> x Hours / ym -> y Minutes ) |
NODE_ENV | Defines node envirionment :: Possible values: production/development |
- Install Node.js version 14.18.0 or higher
- Clone the repository
git clone [email protected]:Prochy20/ACTUM_POC_archetype.git <project_name>
- Install dependencies
cd <project_name>
yarn
- Run the project (in production mode)
yarn start
- Run the project (in development mode using nodemon)
yarn dev
Navigate to http://localhost:8055
(port is set in Environment vars)
The main purpose of this repository is to show a project setup and workflow for writing microservice.
This project follows Airbnb JavaScript Style Guide ( see https://github.com/airbnb/javascript )
The folder structure of this app is explained below:
Name | Description |
---|---|
logs | Default directory used for storing of the logs |
node_modules | Contains all npm dependencies |
src | Contains source code of the solution |
src/api | Contains all available API routes |
src/api/v1/ | Contains v1 of available API routes |
src/config | Contains application config (built on top of .env) |
src/errors | Contains all available errors (reused in express middlewares) |
src/logger | Common logging instance to be used across whole app. |
src/middlewares | Express middlewares which process the incoming requests before handling them down to the routes |
src/service.js | Main application entry point |
Following npm packages are used in project:
Name | Description | Version |
---|---|---|
cors | Node.js CORS middleware | ^2.8.5 |
dotenv | Loads environment variables from .env file | ^16.0.0 |
express | REST API Framework | ^4.17.3 |
express-rate-limit | Basic IP rate-limiting middleware for Express. Use to limit repeated requests to public APIs. | ^6.3.0 |
helmet | A middleware which helps secure Express/Connect apps with various HTTP headers | ^5.0.2 |
morgan | HTTP request logger middleware for node.js | ^1.10.0 |
winston | A popular logging library | ^3.7.2 |
winston-daily-rotate-file | A transport for winston which logs to a rotating file each day | ^4.6.1 |
Following npm packages are used in project as DEV dependencies:
Name | Description | Version |
---|---|---|
eslint | An AST-based pattern checker for JavaScript | ^8.12.0 |
eslint-config-airbnb-base | Airbnb's base JS ESLint config, following our styleguide | ^15.0.0 |
eslint-plugin-import | This plugin intends to support linting of ES2015+ (ES6+) import/export syntax, and prevent issues with misspelling of file paths and import names. | ^2.25.4 |
nodemon | Simple monitor script for use during development of a node.js app | ^2.0.15 |