node-microsvc-lib
Version:
NodeJS microservice framework library
159 lines (116 loc) • 4.94 kB
Markdown
[](https://github.com/pedrosousabarreto/node-microsvc-lib/commits/master)
[](https://www.npmjs.com/package/node-microsvc-lib)
[](https://www.npmjs.com/package/node-microsvc-lib)
[](https://circleci.com/gh/pedrosousabarreto/node-microsvc-lib)
```bash
npm install node-microsvc-lib --save
```
Creating a microservice app:
*app.ts*
```javascript
"use strict";
import {Microservice, ConsoleLogger} from "node-microsvc-lib";
// factories/modules
import {RequestLogger} from "./factories/request_logger";
import {HealthCheck} from "./factories/health_check";
import {TestRestCtrl} from "./factories/rest_service";
// configs
import configs = require("./config/config");
const logger = new ConsoleLogger();
// create microservice appv
const app = new Microservice(configs, logger);
app.register_dependency("logger", logger);
app.register_factory("request_logger", RequestLogger);
app.register_factory("test_rest_ctrl", TestRestCtrl);
app.register_factory("health_check", HealthCheck);
process.on("uncaughtException", (err:Error)=>{
logger.fatal(err);
});
app.init().catch((err) => {
return logger.error(err);
}).then(()=> {
logger.info("APP STARTED");
});
```
The *Microservice* instance expects a *ServiceConfigs* instance.
This *ServiceConfigs* instance requires the base dir `__dirname`, an instance of *AppBaseConfigs* and an (optional) instance of *IConfigsProvider*.
Three sets of configuration values exist:
- Parameters - values can be of type STRING, BOOL, INT_NUMBER or FLOAT_NUMBER;
- Feature Flags - values are always of boolean type;
- Secrets - values are always of string type.
This is the object that the *Microservice* requires to source all its runtime configurations.
Optional instance that fetches all config values from an external service such as consul or hashicorp vault.
The order of loading:
1. **params.js file** - ServiceParams instance gets loaded along with the default values;
2. **params.ENV_NAME.js file** - the one that overrides values in ServiceParams per env;
3. **IConfigsProvider** - if a correspondent key name exists the value from the provider overrides the current one *(after app/microservice init)*;
4. **Environment vars** - all parameters can be overridden by passing an uppercase env var with the param key name *(after app/microservice init)*
In summary, env vars always win (if defined).
### Minimum config structure
```
src/config/config.ts (main config object)
src/config/param.ts (default params definition)
```
### Example of config code structure
See [the ref implementaion](https://github.com/pedrosousabarreto/node-microsvc-lib/tree/master/src/tests/config])
*config/config.ts*
```javascript
"use strict";
import {ServiceConfigs, AppBaseConfigs} from "node-microsvc-lib";
let app_base_confs = new AppBaseConfigs();
app_base_confs.env = process.env.APP_ENV || 'dev_local';
app_base_confs.solution_name = "my_solution";
app_base_confs.app_name = "my_app";
app_base_confs.app_version = "0.0.1";
app_base_confs.app_api_prefix = "";
app_base_confs.app_api_version = "1";
export = new ServiceConfigs(__dirname, app_base_confs, null);
```
*config/params.ts*
```javascript
"use strict";
import {ParamTypes, ServiceParams} from "node-microsvc-lib";
let params = new ServiceParams();
params.add_param(
"test_param",
ParamTypes.STRING,
"default_val",
"test param to be overridden by env_var"
);
params.add_feature_flag(
"RUN_EXPRESS_APP",
true,
"start the express application"
);
params.add_secret(
"secret1",
null, // secrets should be loaded from an IServiceProvider or a non-github-tracked per env override file
"db password example"
);
export = params;
```
*config/overrides.stage.ts (optional file see step 2 above - where "stage" comes from APP_ENV)*
```javascript
"use strict";
import {ServiceParams} from "node-microsvc-lib";
module.exports = function(configs:ServiceConfigs){
// override params, feature_flags or secrets values'
configs.override_param_value("kafka_conn_string", "stage:9092");
};
```
NVM - Node Version Manager - https://github.com/creationix/nvm
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
```
After NVM is installed, go to the proect directory and execute this to download and install the correct node version:
```bash
nvm install -s
```