aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/mongodb.ts44
1 files changed, 29 insertions, 15 deletions
diff --git a/src/lib/mongodb.ts b/src/lib/mongodb.ts
index 1fc60d4..b3cb896 100644
--- a/src/lib/mongodb.ts
+++ b/src/lib/mongodb.ts
@@ -2,29 +2,43 @@ import mongoose from "mongoose";
const MONGODB_URI = process.env.MONGODB_URI;
-if (!MONGODB_URI) {
- throw new Error("Please define the MONGODB_URI environment variable inside .env.local");
+interface MongooseCache {
+ conn: typeof mongoose | null;
+ promise: Promise<typeof mongoose> | null;
}
-interface Connection {
- isConnected?: number;
+declare global {
+ var mongoose: MongooseCache | undefined;
}
-const connection: Connection = {};
+let cached = global.mongoose;
-async function dbConnect(): Promise<void> {
- if (connection.isConnected) {
- return;
+if (!cached) {
+ cached = global.mongoose = { conn: null, promise: null };
+}
+
+async function dbConnect() {
+ if (!MONGODB_URI) {
+ throw new Error("Please define the MONGODB_URI environment variable inside .env.local");
}
+ if (cached!.conn) return cached!.conn;
+
+ if (!cached!.promise) {
+ const opts = { bufferCommands: false };
+ cached!.promise = mongoose.connect(MONGODB_URI, opts).then((mongoose) => {
+ return mongoose;
+ });
+ }
+
try {
- const db = await mongoose.connect(MONGODB_URI!);
- connection.isConnected = db.connections[0].readyState;
- console.log("MongoDB connected successfully");
- } catch (error) {
- console.error("MongoDB connection error:", error);
- throw error;
+ cached!.conn = await cached!.promise;
+ } catch (e) {
+ cached!.promise = null;
+ throw e;
}
+
+ return cached!.conn;
}
-export default dbConnect; \ No newline at end of file
+export default dbConnect;