Files
kenaito-conf/nodejs-client-demo/app.js
T
odboy 98c5b62d0d feat(client): 添加 Node.js 客户端及示例应用
- 新增 nodejs-client 模块,提供 ConfigClient 配置拉取、定时同步、变更监听
- 使用 Node.js 内置 crypto 模块实现 AES 解密,零外部依赖
- 新增 nodejs-client-demo Express 示例应用,端口 8083
- 更新 README.md,补充 Python 和 Node.js 客户端使用说明
- 修复 fetchAllConfigs API 响应格式判断逻辑
2026-02-08 21:02:57 +08:00

71 lines
1.9 KiB
JavaScript

import express from 'express';
import { Config, ConfigClient } from 'kenaito-conf';
const configValues = {
'database.host': process.env.DATABASE_HOST || '192.168.1.1',
'database.port': process.env.DATABASE_PORT || '8888',
'database.name': process.env.DATABASE_NAME || 'xxxx',
'database.user': process.env.DATABASE_USER || 'xxxx',
'database.password': process.env.DATABASE_PASSWORD || 'xxxxxxxx',
};
let client = null;
function onConfigChanged(changed) {
for (const [k, v] of Object.entries(changed)) {
if (k in configValues) {
configValues[k] = v;
console.log(`config updated: ${k} = ${v}`);
}
}
}
async function createClient() {
const cfg = new Config({
baseUrl: process.env.KENAITO_BASE_URL || 'http://localhost:8080',
appName: process.env.KENAITO_APP_NAME || 'kenaito-springboot-demo',
env: process.env.KENAITO_PROFILE || 'daily',
version: process.env.KENAITO_VERSION || 'latest',
token: process.env.KENAITO_TOKEN || '',
syncInterval: parseInt(process.env.KENAITO_SYNC_INTERVAL || '30', 10),
cacheDir: process.env.KENAITO_CACHE_DIR || '.',
});
const c = new ConfigClient(cfg);
c.onChange(onConfigChanged);
await c.start();
return c;
}
const app = express();
app.get('/', (req, res) => {
res.type('application/json').send(JSON.stringify(configValues, null, 2));
});
app.get('/health', (req, res) => {
res.send('OK');
});
const port = parseInt(process.env.SERVER_PORT || '8083', 10);
async function main() {
try {
client = await createClient();
const remote = client.getAll();
for (const k of Object.keys(configValues)) {
if (k in remote) {
configValues[k] = remote[k];
}
}
console.info(`loaded ${Object.keys(remote).length} configs from remote`);
} catch (err) {
console.error('failed to init config client, using local defaults:', err);
}
app.listen(port, '0.0.0.0', () => {
console.info(`server started on port ${port}`);
});
}
main();