From 24f0e038ebad2c0a77687fa641dd9df4c663b479 Mon Sep 17 00:00:00 2001 From: txai-dev Date: Sun, 13 Sep 2026 00:33:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20mongo=20=E8=BF=9E=E6=8E=A5=E9=87=8D?= =?UTF-8?q?=E8=AF=95=EF=BC=88=E5=AE=B9=E5=99=A8=E7=BC=96=E6=8E=92=20DNS=20?= =?UTF-8?q?=E7=AB=9E=E6=80=81=E5=AF=BC=E8=87=B4=E5=90=AF=E5=8A=A8=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=E9=87=8D=E5=90=AF=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/config/database.js | 94 +++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 42 deletions(-) diff --git a/server/src/config/database.js b/server/src/config/database.js index b4c6eb5..8b92493 100755 --- a/server/src/config/database.js +++ b/server/src/config/database.js @@ -1,42 +1,52 @@ -const mongoose = require('mongoose') - -/** - * 数据库连接配置 - */ -const connectDB = async () => { - try { - const mongoURI = process.env.MONGODB_URI || - `mongodb://${process.env.MONGODB_USER}:${process.env.MONGODB_PASSWORD}@${process.env.MONGODB_HOST}:${process.env.MONGODB_PORT}/${process.env.MONGODB_DB}?authSource=${process.env.MONGODB_DB}` - - const conn = await mongoose.connect(mongoURI, { - // Mongoose 6+ 不再需要这些选项,但保留以兼容旧版本 - // useNewUrlParser: true, - // useUnifiedTopology: true, - }) - - console.log(`✅ MongoDB 连接成功: ${conn.connection.host}:${conn.connection.port}/${conn.connection.name}`) - - // 连接事件监听 - mongoose.connection.on('error', (err) => { - console.error('❌ MongoDB 连接错误:', err) - }) - - mongoose.connection.on('disconnected', () => { - console.warn('⚠️ MongoDB 连接断开') - }) - - // 优雅关闭 - process.on('SIGINT', async () => { - await mongoose.connection.close() - console.log('🔌 MongoDB 连接已关闭') - process.exit(0) - }) - - return conn - } catch (error) { - console.error('❌ MongoDB 连接失败:', error.message) - process.exit(1) - } -} - -module.exports = connectDB +const mongoose = require('mongoose') + +/** + * 数据库连接配置 + */ +const connectDB = async () => { + // 容器编排下 mongo 可能晚于应用就绪(DNS EAI_AGAIN),带重试启动 + const mongoURI = process.env.MONGODB_URI || + `mongodb://${process.env.MONGODB_USER}:${process.env.MONGODB_PASSWORD}@${process.env.MONGODB_HOST}:${process.env.MONGODB_PORT}/${process.env.MONGODB_DB}?authSource=${process.env.MONGODB_DB}` + const MAX_RETRIES = 10 + let conn = null + for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) { + try { + conn = await mongoose.connect(mongoURI, {}) + break + } catch (err) { + console.warn(`MongoDB 连接失败(${attempt}/${MAX_RETRIES}):`, err.message) + if (attempt === MAX_RETRIES) { + console.error('MongoDB 连接重试耗尽,进程退出') + process.exit(1) + } + await new Promise(r => setTimeout(r, 3000)) + } + } + try { + + console.log(`✅ MongoDB 连接成功: ${conn.connection.host}:${conn.connection.port}/${conn.connection.name}`) + + // 连接事件监听 + mongoose.connection.on('error', (err) => { + console.error('❌ MongoDB 连接错误:', err) + }) + + mongoose.connection.on('disconnected', () => { + console.warn('⚠️ MongoDB 连接断开') + }) + + // 优雅关闭 + process.on('SIGINT', async () => { + await mongoose.connection.close() + console.log('🔌 MongoDB 连接已关闭') + process.exit(0) + }) + + return conn + } catch (error) { + console.error('❌ MongoDB 连接失败:', error.message) + process.exit(1) + } +} + +module.exports = connectDB