fix: mongo 连接重试(容器编排 DNS 竞态导致启动循环重启)

This commit is contained in:
2026-09-13 00:33:46 +08:00
parent 430d125a18
commit 24f0e038eb
+17 -7
View File
@@ -4,15 +4,25 @@ const mongoose = require('mongoose')
* 数据库连接配置
*/
const connectDB = async () => {
try {
// 容器编排下 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 conn = await mongoose.connect(mongoURI, {
// Mongoose 6+ 不再需要这些选项,但保留以兼容旧版本
// useNewUrlParser: true,
// useUnifiedTopology: true,
})
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}`)