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