fix: mongo 连接重试(容器编排 DNS 竞态导致启动循环重启)
This commit is contained in:
@@ -4,15 +4,25 @@ 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 {
|
||||
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}`)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user