From b409adf9d89ce8a45b33903fcce25813d801381a Mon Sep 17 00:00:00 2001 From: QTom Date: Tue, 9 Dec 2025 18:41:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BF=AE=E5=A4=8D=20userMessageQueue?= =?UTF-8?q?=20=E9=85=8D=E7=BD=AE=E7=BC=BA=E5=A4=B1=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=9A=84=20500=20=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 config.example.js 添加缺失的 userMessageQueue 配置段 - 在 userMessageQueueService.js 添加防御性代码,当配置未定义时使用默认值 修复 #783 合并后新用户安装报错: Cannot read properties of undefined (reading 'enabled') --- config/config.example.js | 8 ++++++++ src/services/userMessageQueueService.js | 24 ++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/config/config.example.js b/config/config.example.js index 5395142a..090937ed 100644 --- a/config/config.example.js +++ b/config/config.example.js @@ -203,6 +203,14 @@ const config = { development: { debug: process.env.DEBUG === 'true', hotReload: process.env.HOT_RELOAD === 'true' + }, + + // 📬 用户消息队列配置 + userMessageQueue: { + enabled: process.env.USER_MESSAGE_QUEUE_ENABLED === 'true', // 默认关闭 + delayMs: parseInt(process.env.USER_MESSAGE_QUEUE_DELAY_MS) || 100, // 请求间隔(毫秒) + timeoutMs: parseInt(process.env.USER_MESSAGE_QUEUE_TIMEOUT_MS) || 60000, // 队列等待超时(毫秒) + lockTtlMs: 120000 // 锁租约TTL(毫秒),会在请求期间自动续租以防死锁 } } diff --git a/src/services/userMessageQueueService.js b/src/services/userMessageQueueService.js index 0c8851e9..6437ef4b 100644 --- a/src/services/userMessageQueueService.js +++ b/src/services/userMessageQueueService.js @@ -73,6 +73,15 @@ class UserMessageQueueService { * @returns {Promise} 配置对象 */ async getConfig() { + // 默认配置(防止 config.userMessageQueue 未定义) + const queueConfig = config.userMessageQueue || {} + const defaults = { + enabled: queueConfig.enabled ?? false, + delayMs: queueConfig.delayMs ?? 100, + timeoutMs: queueConfig.timeoutMs ?? 60000, + lockTtlMs: queueConfig.lockTtlMs ?? 120000 + } + // 尝试从 claudeRelayConfigService 获取 Web 界面配置 try { const claudeRelayConfigService = require('./claudeRelayConfigService') @@ -82,25 +91,20 @@ class UserMessageQueueService { enabled: webConfig.userMessageQueueEnabled !== undefined ? webConfig.userMessageQueueEnabled - : config.userMessageQueue.enabled, + : defaults.enabled, delayMs: webConfig.userMessageQueueDelayMs !== undefined ? webConfig.userMessageQueueDelayMs - : config.userMessageQueue.delayMs, + : defaults.delayMs, timeoutMs: webConfig.userMessageQueueTimeoutMs !== undefined ? webConfig.userMessageQueueTimeoutMs - : config.userMessageQueue.timeoutMs, - lockTtlMs: config.userMessageQueue.lockTtlMs + : defaults.timeoutMs, + lockTtlMs: defaults.lockTtlMs } } catch { // 回退到环境变量配置 - return { - enabled: config.userMessageQueue.enabled, - delayMs: config.userMessageQueue.delayMs, - timeoutMs: config.userMessageQueue.timeoutMs, - lockTtlMs: config.userMessageQueue.lockTtlMs - } + return defaults } }