目标
构建配置中心:加载基础 JSON 文件、叠加环境变量、再叠加数据库覆盖,按文档化优先级解析合并树,经 schema 校验后才对外提供,无效合并一律拒绝服务。
要点
合并顺序是核心契约:文件默认值、环境覆盖部署差异、数据库覆盖运行时调参;对象深合并、标量与数组整体替换。校验只跑在最终合并结果上(分层各自合法仍可能合并出违规树),失败返回 503 并带精确路径;缓存以引用交换更新,读方永远拿到完整旧树或新树。
提示
环境变量映射 APP_DATABASE__POOL__MAX 展开为嵌套键,前缀必须含应用名避免串台;布尔 true/false 字符串需特判解析。
验证
来源报告随 GET 返回,逐叶指出获胜层;破坏 schema 的覆盖写入返回 422 且旧树继续服务。 项目目录骨架:
config-center/
├── src/
│ ├── server.js
│ ├── merge.js
│ ├── layers/
│ │ ├── fileLayer.js
│ │ ├── envLayer.js
│ │ └── dbLayer.js
│ └── validate.js
├── schemas/app.json
├── base/app.json
├── test/
│ ├── merge.test.js
│ └── api.test.js
└── package.json
实施阶段:Deep merge with origins → Environment layer mapping → Schema gate and serving → Override writes and cache swap。