From 7885cede659f3255be56f77c1eef2ada7387d6f1 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期日, 22 三月 2026 16:23:21 +0800
Subject: [PATCH] 初始化项目
---
src/config.js | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 105 insertions(+), 0 deletions(-)
diff --git a/src/config.js b/src/config.js
new file mode 100644
index 0000000..8d41f28
--- /dev/null
+++ b/src/config.js
@@ -0,0 +1,105 @@
+// 配置文件:默认配置 + 同级目录 ../config.json 覆盖
+// 这样打包成可执行文件 / APK 时,只需修改外部 JSON 即可调整参数。
+
+const fs = require("fs");
+const path = require("path");
+
+const defaultConfig = {
+ log: {
+ // 是否写入本地日志文件
+ toFile: true,
+ // 日志目录(相对本项目根目录)
+ dir: "../logs",
+ // 预留日志级别控制(当前未严格使用)
+ level: "debug"
+ },
+ tcp: {
+ host: "0.0.0.0",
+ // 为避免本机已有程序占用,测试阶段改用 19000 端口
+ port: 19000,
+ idleTimeoutMs: 2 * 60 * 1000, // 设备超时时间 2 分钟
+ // 单连接缓冲区上限,防止异常数据导致内存持续增长
+ maxBufferBytes: 1024 * 1024,
+ // 每次 data 事件最多解析帧数,避免单连接长时间占用事件循环
+ maxFramesPerChunk: 50,
+ // TCP 最大并发连接数(覆盖 50 台透析机场景并保留余量)
+ maxConnections: 200
+ },
+ http: {
+ enabled: false,
+ host: "0.0.0.0",
+ // HTTP 服务测试端口改为 19001
+ port: 19001,
+ cors: {
+ enabled: true,
+ origins: ["*"]
+ },
+ rateLimit: {
+ singleDeviceMs: 5000,
+ allDevicesMs: 60 * 1000
+ }
+ },
+ mqtt: {
+ enabled: false,
+ url: "mqtt.ihemodialysis.com",
+ port: 62283,
+ username: "data",
+ password: "data#2018",
+ reconnectPeriod: 5000,
+ defaultTopicPrefix: "touxiji",
+ // 是否对每台机的最后一条消息做 retain,方便后续订阅方随时获取最新快照
+ retain: true
+ },
+ aliyun: {
+ enabled: true,
+ // 旧项目中三元组接口的基础地址,如需更换请修改此处
+ baseURL: "https://things.icoldchain.cn/",
+ // 其他阿里云物联网接入参数可在此扩展
+ }
+};
+
+// 递归浅合并:以 external 为准覆盖 default
+function mergeConfig(defaultCfg, externalCfg) {
+ if (!externalCfg || typeof externalCfg !== "object") return defaultCfg;
+ const result = { ...defaultCfg };
+ for (const key of Object.keys(externalCfg)) {
+ const val = externalCfg[key];
+ if (
+ val &&
+ typeof val === "object" &&
+ !Array.isArray(val) &&
+ typeof defaultCfg[key] === "object" &&
+ defaultCfg[key] !== null
+ ) {
+ result[key] = mergeConfig(defaultCfg[key], val);
+ } else {
+ result[key] = val;
+ }
+ }
+ return result;
+}
+
+// 运行根目录:
+// - 普通 Node 环境下:项目根目录;
+// - 使用 pkg 打包后:可执行文件所在目录。
+const appRoot = (function () {
+ if (process.pkg) {
+ // pkg 打包后的场景
+ return path.dirname(process.execPath);
+ }
+ // 开发环境:src 目录的上一级
+ return path.resolve(__dirname, "..");
+})();
+
+let externalConfig = {};
+try {
+ const jsonPath = path.join(appRoot, "config.json");
+ if (fs.existsSync(jsonPath)) {
+ const raw = fs.readFileSync(jsonPath, "utf8");
+ externalConfig = JSON.parse(raw);
+ }
+} catch (e) {
+ // 如果 JSON 解析失败,直接忽略,继续使用默认配置
+}
+
+module.exports = mergeConfig(defaultConfig, externalConfig);
--
Gitblit v1.8.0