Requires: NodeJS 8+
Feature requests are welcome.
npm i cloud-config-client
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");
});
- options -
Object
, mandatory:- endpoint
string
, optional, default=http://localhost:8888
: Config server URL. - rejectUnauthorized -
boolean
, optional, default =true
: iffalse
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
- user -
- 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) - headers -
object
, optional: Additional request headers (Since version 1.5.0)
- endpoint
- 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)
//...
}
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 stringDEFAULT_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)
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.
get(...parts)
: Retrieve a value at a given path or undefined. Multiple parameters can be used to calculate the key.- parts -
string
, variable, mandatory:
- parts -
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 orreplace
.
- callback -
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));
toString(spaces): string
: Returns a string representation ofraw
property.- spaces -
number
, optional: spaces to use in format.
- spaces -
toObject([options]): object
: Returns the whole configuration as an object. (Since version 1.3.0).options.overlappingArrays
— specify strategy to process overlapping arrays:merge
— default behaviour, merge overlapping listsreplace
— use only the array from the most specific property source:
// Simplified data from Spring Cloud Config:
// [
// {"key01[0]" : 5}, // ← the most specific property source
// {"key01[0]" : "string1", "key01[1]" : "string2"}
// ]
config.toObject({overlappingArrays:'merge'}) // {"key01[0]": 5, "key01[1]": "string2"}
config.toObject({overlappingArrays:'replace'}) // {"key01[0]": 5}
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))