@mhansen1/cloud-config-client

0.1.11 • Public • Published

Spring Cloud Config Client for NodeJS

Build Status

Requires: NodeJS 4+

Feature requests are welcome.

Install

npm install cloud-config-client --save

Usage

const client = require("cloud-config-client");
client.load({
    application: "invoices"
}).then((config) => {
    // Look for a key
    const value1 = config.get("this.is.a.key");

    // Using a prefix, this is equivalent to .get("this.is.another.key");
    const value2 = config.get("this.is", "another.key");
});

load function

Load implementation

Parameters

  • options - Object, mandatory:
    • endpoint string, optional, default=http://localhost:8888: Config server URL.
    • rejectUnauthorized - boolean, optional, default = true: if false accepts self-signed certificates
    • application - string, deprecated, use name: Load configuration for this application.
    • name - string, mandatory: Load the configuration with this name.
    • profiles string|string[], optional, default="default": Load profiles.
    • label - string, optional: Load environment.
    • auth - Object, optional: Basic Authentication for access config server (e.g.: { user: "username", pass: "password"}). endpoint accepts also basic auth (e.g. http://user:pass@localhost:8888).
      • user - string, mandatory
      • pass - string, mandatory
    • agent - http.Agent|https.Agent, optional: Agent for the request. (e.g. use a proxy) (Since version 1.2.0)
    • context - object, optional: Context for substitution (see context section below) (Since version 1.4.0)
  • callback - function(error: Error, config: Config), optional: node style callback. If missing, the method will return a promise.
client.load(options)
.then((config) => { ... })
.catch((error) => { ... })

// or

client.load(options, (error, config) => { ... })

// or

async function foo () {
    const config = await client.load(options)
    //...
}

Context references (Since version 1.4.0)

Strings could contain context references, if a contexts is provided those references will be replaced by the actual values in the Config object reference.

YAML example:

key01: Hello ${NAME:World}!!!

This is not related to spEl and those references are not an expression language.

Reference structure: ${CONTEXT_KEY:DEFAULT_VALUE?}:

  • CONTEXT_KEY: Context key, if the value for the key is missing it will be use the default value or return the original string
  • DEFAULT_VALUE: Optional default value

Environment variables as context:

Client.load({
  endpoint: 'http://server:8888',
  name: 'application',
  context: process.env })
.then(config => {
  // config loaded
}).catch(console.error)

Config object

Config class implementation

Properties

  • raw: Spring raw response data.
  • properties: computed properties as per Spring specification:

    Property keys in more specifically named files override those in application.properties or application.yml.

Methods

  • get(...parts): Retrieve a value at a given path or undefined. Multiple parameters can be used to calculate the key.
    • parts - string, variable, mandatory:
  • forEach(callback, includeOverridden): Iterates over every key/value in the config.
    • callback - function(key: string, value: string), mandatory: iteration callback.
    • includeOverridden - boolean, optional, default=false: if true, include overridden keys.
  • toString(spaces): string: Returns a string representation of raw property.
    • spaces - number, optional: spaces to use in format.
  • toObject(): object: Returns the whole configuration as an object. (Since version 1.3.0)
config.get("this.is.a.key");
config.get("this.is", "a.key");
config.get("this", "is", "a", "key");

config.forEach((key, value) => console.log(key + ":" + value));

Behind a proxy

Example (adapted from https-proxy-agent site):

const HttpsProxyAgent = require('https-proxy-agent')
const client = require('cloud-config-client')

const proxy = process.env.http_proxy || 'http://168.63.76.32:3128'
console.log('using proxy server %j', proxy)
const agent = new HttpsProxyAgent(proxy)

const options = {
  application: 'demo',
  profiles: ['test', 'timeout'],
  agent
}
client.load(options).then((cfg) => {
  console.log(cfg.get('test.users', 'multi.uid'))
  console.log(cfg.toString(2))
}).catch((error) => console.error(error))

References

Package Sidebar

Install

npm i @mhansen1/cloud-config-client

Weekly Downloads

9

Version

0.1.11

License

MIT

Unpacked Size

33.4 kB

Total Files

13

Last publish

Collaborators

  • mhansen1