# etcd-node-config

> 获取 etcd 配置中心信息注册到环境变量中, v1.x 支持etcd v2 版本, v2.x 支持etcd v3 版本

Latest version **2.0.2** (published 2023-01-12) · ISC license · 0 weekly downloads

## Install

```sh
npm install etcd-node-config
pnpm add etcd-node-config
yarn add etcd-node-config
bun add etcd-node-config
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.2 |
| Published | 2023-01-12 |
| First published | 2022-03-18 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 16.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | dq |
| Maintainers | dq198 |
| Keywords | etcd, etcd-node, node-etcd, etcd-config, etcd-node-config |

## Links

- npm: https://www.npmjs.com/package/etcd-node-config
- Repository: https://github.com/1981430140/etcd-node-config
- Homepage: https://github.com/1981430140/etcd-node-config#readme
- Issues: https://github.com/1981430140/etcd-node-config/issues
- npm.io page: https://npm.io/package/etcd-node-config

## Dependencies (3)

- [etcd3](https://npm.io/package/etcd3.md) ^1.1.0
- [dotenv](https://npm.io/package/dotenv.md) ^16.0.0
- [js-yaml](https://npm.io/package/js-yaml.md) ^4.1.0

## Alternatives

- [jsforce](https://npm.io/package/jsforce.md) — 851.2K weekly downloads
- [react-native-qrcode-svg](https://npm.io/package/react-native-qrcode-svg.md) — 693.5K weekly downloads
- [@salesforce/plugin-data](https://npm.io/package/@salesforce/plugin-data.md) — 394.9K weekly downloads
- [@backstage/plugin-search-common](https://npm.io/package/@backstage/plugin-search-common.md) — 308.5K weekly downloads
- [@chain-registry/types](https://npm.io/package/@chain-registry/types.md) — 38.4K weekly downloads

## Recent versions

- 2.0.2 (latest) — 2023-01-12
- 1.0.4 — 2022-08-29
- 2.0.1 — 2022-08-29
- 2.0.0 — 2022-08-19
- 1.0.3 — 2022-08-16
- 1.0.2 — 2022-08-16
- 1.0.1 — 2022-03-23
- 1.0.0 — 2022-03-18

## README

## 安装插件

```bash
$ npm i etcd-node-config --save

// etcd 版本为 v2 使用 1.x 版本
npm i etcd-node-config@1.x --save

// etcd 版本为 v3 使用 2.x 版本
npm i etcd-node-config@2.x --save
```

## 版本选择
Node.js SDK \ ETCD Server  |  v2   |  v3   |
---                        |  ---  |  ---  |
1.x                        |   √   |       |
2.x                        |       |   √   |


## 获取 ETCD 配置数据使用方式

用法也可以参考 [node-apollo](https://www.npmjs.com/package/node-apollo)

### 1.根目录下创建脚本

{app_root}/etcd.js

```js
const { fetchRemoteEtcdConfig } = require("etcd-node-config");
fetchRemoteEtcdConfig({
  hosts: process.env["ETCD_HOST"] || "127.0.0.1:2379",
  paths: ["redis", { path: "/db/test_db", name: "mydb", type: "json" }], // 需要读取 etcd 上的配置目录地址
}).then((env) => {
  console.log("获取 ETCD 数据：", env); // 输出： {redis: ... , mydb: ...}
});
```

### 2.启动项目时运行脚本

{app_root}/package.json

```js
...
"scripts": {
  "start": "node etcd.js && node index.js",
  "nest": "node etcd.js && nest start",
  "egg": "node etcd.js && egg-scripts start",
  "other": "node etcd.js && ..."
}
...
```

### 3.在项目入口文件中将配置设置到环境变量中

```js
// {app_root}/入口文件
require("etcd-node-config").setEnv();
// or
import { setEnv } from "etcd-node-config";
setEnv();
```

### 4.在项目中从环境变量读取配置

注意： 从环境变量中读取配置时属性名需要加上前缀 etcd , 如： process.env["etcd.redis"] or process.env["etcd.xxx"]

```js
...
config.redis = {
  client: {
    host: process.env["etcd.redis.host"], // 从环境变量中读取配置
    port: process.env["etcd.redis.port"],
    password: process.env["etcd.redis.password"],
    db: process.env["etcd.redis.db"],
  },
};
// or
config.db = JSON.parse(process.env["etcd.db"]);
// or
Object.assign(config, getEnv(null, true));
...
```

## ETCD 配置数据格式支持

- json

```
{
    "a":1,
    "b":2
}

// code
console.log(process.env["etcd.a"]) // 输出： 1
console.log(process.env["etcd.b"]) // 输出： 2
```

- yaml

```
db:
  - name: db001
    host: localhost
    port: 5432
  - name: db002
    host: localhost
    port: 5433

// code
console.log(process.env["etcd.db[0].name"]) // 输出： db001
console.log(process.env["etcd.db[1].name"]) // 输出： db002
```

- ini

```
a=1
b = 2
c.d= 3

// code
console.log(process.env["etcd.a"]) // 1
console.log(process.env["etcd.b"]) // 2
console.log(process.env["etcd.c.d"]) // 3
```

- text

```
// path: /config/test

test01
test02

// code
console.log(process.env["etcd.config.test"]) // 输出： test01\ntest02  （从环境变量中读取text数据格式时以 etcd 配置的path名称读取）

```

## 监听配置数据

### 1.在 path 配置中添加 watcher: true

```
fetchRemoteEtcdConfig({
  hosts: process.env['ETCD_HOST'] || "127.0.0.1:2379",
  paths: ['redis', { path: '/db/test_db', name: 'mydb', type: 'json', watcher: true }] // 需要读取 etcd 上的配置目录地址
})
```

### 2.在项目中监听配置

```
const { watcher } = require('etcd-node-config');
const etcdWatcher = watcher();
etcdWatcher.on('change', console.log)
```

### APIs

- `fetchRemoteEtcdConfig(clientOptions)` 获取远程 ETCD 配置信息
  - clientOptions {ClientOptions}
- `createEnvFile(config, filePath)` 将配置信息写入到文件
  - config {Object}
  - filePath {String}
- `setEnv()` 注入到环境变量
- `getEnv(filePath, isDelEtcdPrefix)` 获取 ETCD 配置数据
  - filePath {String}
  - isDelEtcdPrefix {Boolean} 是否删除 etcd 前缀

## License

[BSD-2-Clause](LICENSE)

---
_Source: https://npm.io/package/etcd-node-config · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
