🔧 Added startup scripts fixing MongoDB timeouts
This commit is contained in:
@@ -3,72 +3,59 @@ const mkdir = require("mkdirp").sync;
|
||||
const DbService = require("moleculer-db");
|
||||
|
||||
export const DbMixin = (collection, model) => {
|
||||
if (process.env.MONGO_URI) {
|
||||
const MongooseAdapter = require("moleculer-db-adapter-mongoose");
|
||||
console.log("Connecting to MongoDB at", process.env.MONGO_URI);
|
||||
|
||||
const connectWithRetry = (
|
||||
adapter,
|
||||
maxRetries = 5,
|
||||
interval = 5000,
|
||||
retries = 0
|
||||
) => {
|
||||
return adapter
|
||||
.connect()
|
||||
.then(() => console.log("MongoDB connected successfully!"))
|
||||
.catch((err) => {
|
||||
console.error("MongoDB connection error:", err);
|
||||
if (retries < maxRetries) {
|
||||
console.log(
|
||||
`Retrying MongoDB connection in ${
|
||||
interval / 1000
|
||||
} seconds...`
|
||||
);
|
||||
setTimeout(
|
||||
() =>
|
||||
connectWithRetry(
|
||||
adapter,
|
||||
maxRetries,
|
||||
interval,
|
||||
retries + 1
|
||||
),
|
||||
interval
|
||||
);
|
||||
} else {
|
||||
console.error(
|
||||
"Failed to connect to MongoDB after several attempts."
|
||||
);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const adapter = new MongooseAdapter(process.env.MONGO_URI, {
|
||||
user: process.env.MONGO_INITDB_ROOT_USERNAME,
|
||||
pass: process.env.MONGO_INITDB_ROOT_PASSWORD,
|
||||
keepAlive: true,
|
||||
useNewUrlParser: true,
|
||||
useUnifiedTopology: true,
|
||||
});
|
||||
|
||||
return {
|
||||
mixins: [DbService],
|
||||
adapter: adapter,
|
||||
model,
|
||||
collection,
|
||||
started() {
|
||||
connectWithRetry(this.adapter);
|
||||
},
|
||||
stopped() {
|
||||
this.adapter
|
||||
.disconnect()
|
||||
.then(() => console.log("MongoDB disconnected"))
|
||||
.catch((err) =>
|
||||
console.error("MongoDB disconnection error:", err)
|
||||
);
|
||||
},
|
||||
};
|
||||
} else {
|
||||
if (!process.env.MONGO_URI) {
|
||||
console.log("MONGO_URI not provided, initializing local storage...");
|
||||
mkdir(path.resolve("./data"));
|
||||
return { mixins: [DbService] }; // Handle case where no DB URI is provided
|
||||
}
|
||||
|
||||
const MongooseAdapter = require("moleculer-db-adapter-mongoose");
|
||||
const adapter = new MongooseAdapter(process.env.MONGO_URI, {
|
||||
user: process.env.MONGO_INITDB_ROOT_USERNAME,
|
||||
pass: process.env.MONGO_INITDB_ROOT_PASSWORD,
|
||||
keepAlive: true,
|
||||
useNewUrlParser: true,
|
||||
useUnifiedTopology: true,
|
||||
});
|
||||
|
||||
const connectWithRetry = async (
|
||||
adapter,
|
||||
maxRetries = 5,
|
||||
interval = 5000
|
||||
) => {
|
||||
for (let retry = 0; retry < maxRetries; retry++) {
|
||||
try {
|
||||
await adapter.connect();
|
||||
console.log("MongoDB connected successfully!");
|
||||
return;
|
||||
} catch (err) {
|
||||
console.error("MongoDB connection error:", err);
|
||||
console.log(
|
||||
`Retrying MongoDB connection in ${
|
||||
interval / 1000
|
||||
} seconds...`
|
||||
);
|
||||
await new Promise((resolve) => setTimeout(resolve, interval));
|
||||
}
|
||||
}
|
||||
console.error("Failed to connect to MongoDB after several attempts.");
|
||||
};
|
||||
|
||||
return {
|
||||
mixins: [DbService],
|
||||
adapter,
|
||||
model,
|
||||
collection,
|
||||
async started() {
|
||||
await connectWithRetry(this.adapter);
|
||||
},
|
||||
async stopped() {
|
||||
try {
|
||||
await this.adapter.disconnect();
|
||||
console.log("MongoDB disconnected");
|
||||
} catch (err) {
|
||||
console.error("MongoDB disconnection error:", err);
|
||||
}
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user