fix: mongo 连接重试(容器编排 DNS 竞态导致启动循环重启)
This commit is contained in:
@@ -4,15 +4,25 @@ const mongoose = require('mongoose')
|
|||||||
* 数据库连接配置
|
* 数据库连接配置
|
||||||
*/
|
*/
|
||||||
const connectDB = async () => {
|
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 {
|
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}`)
|
console.log(`✅ MongoDB 连接成功: ${conn.connection.host}:${conn.connection.port}/${conn.connection.name}`)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user