UNPKG

consul-conf

Version:
63 lines (57 loc) 1.68 kB
var consul = require('consul'); function Conf(host, port, service_name, container_name, env, token, scheme) { var host = host || "localhost"; var port = port || 8500; var service_name = service_name || 'HelloWorld'; var container_name = container_name || 'default'; var env = env || 'local'; var token = token || null; var schema = schema || "http"; var config_url = service_name + '/' + container_name + '/' + env; // || "iplexus/default/local"; var client = new consul({ host: host, port: port, token: token }); var createNestedObject = function(base, names, value) { var lastName = arguments.length === 3 ? names.pop() : false; for (var i = 0; i < names.length; i++) { base = base[names[i]] = base[names[i]] || {}; } if (lastName) base = base[lastName] = value; return base; }; this.get_all = function(cb) { cb = cb || function() {}; var config = {}; var self = this; var flag = 0; client.kv.get({ key: config_url, recurse: true, token: token }, function(err, kvs_data) { if (err) { cb(err); }; if (!kvs_data) { return cb(null, config); } for (var i = 0; i < kvs_data.length; i++) { var keys = kvs_data[i].Key.replace(config_url, '').split('/'); value = kvs_data[i].Value; ++flag; if (value) { try { value = JSON.parse(value); } catch (e) {} createNestedObject(config, keys.slice(1, keys.length), value); if (flag == kvs_data.length) { cb(null, config); } } } }) } } module.exports = Conf;