diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/mongodb.ts | 44 |
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; |
