consul-kv-parser v0.0.6
consul-kv-parser
Gets provided keys from Consul KV store, and puts them into an object structure, based on folders in Consul. Values can be parsed into provided types and a check for required properties is done.
const parser = require("consul-kv-parser");
const Parser = new parser({
parser: {
prefix: "production"
},
consul: {
host: "localhost",
promisify: true
}
});
//connects to Consul
Parser.connect();
let keys = [
{key: "some/key", require: true},
{key: "some/other/num", type: parser.types.number}
];
//parse returns a promise which resolves into object containing
//parsed values
Parser.parse(key).then((values) => console.log(values));
//will result in this object
{
some: {
key: "some value",
other: {
num: 123
}
}
}
Installation
npm i --save consul-kv-parser
Configuration
Consul configuration
consul-kv-parser
uses (node-consul)https://github.com/silas/node-consul to handle conenction to Consul, so you can simply use the same configuration here:
const parser = require("consul-kv-parser");
const config = {
consul: {
host: "localhost",
promisify: true
}
}
const Parser = new parser(config);
//connect to consul
Parser.connect();
Important note: only promise answered are supported, so if you don't provide promisify
parameter it will be set automatically!
Parser configuration
You can specify prefix that will be appended at the beginning of all keys, by providing prefix
config parameter to parser
object inside configuration:
const parser = require("consul-kv-parser");
const config = {
parser: {
prefix: "production"
}
}
const Parser = new parser(config);
//all keys will be prefixed with "production/" string
Resulting object won't have prefix
as a root property
Sample configuration
const parser = require("consul-kv-parser");
const config = {
parser: {
prefix: "production"
},
consul: {
host: "localhost",
promisify: true
}
}
const Parser = new parser(config);
Parsing and keys configuration
They keys that you pass to parse
method of the parser must be an array of objects of this structure:
let keys = [
{
key: "some/key", //required property
type: parser.types().number, //optional property
require: true //optional property
}
];
Key property
In consul you can have folders to store values, the parse will divide the key that you provide by /
character and put the value on the appropriate level of the object.
So, if you provide the key some/key/here
you will get this object: {some: {key: {here: VALUE}}}
Type property
You can specify the type of the value stored in Consul, to let parser know how to parse it, available types are:
const parser = require("consul-kv-parser");
parser.types.string //will return the string that is stored in consul
parser.types.number //will parse both floats and integers
parser.types.object //assumes it contains s stringified version of the object
If you don't provide any type, the string parser will be used
Require property
If you set require=true
on the key object and there is no value stored in Consul for probided key, an exception will be thrown.
Testing
Just run npm test
inside the repo to run the tests.
Licence
This work is licensed under the MIT License (see the LICENSE file).