From f5ea42ab5db9c880fbeb35282d6da4b3e006fca5 Mon Sep 17 00:00:00 2001 From: schererleander Date: Fri, 26 Dec 2025 14:57:16 +0100 Subject: fix(lib): improve types and lazy loading in mongodb connection --- src/lib/mongodb.ts | 44 +++++++++++++++++++++++++++++--------------- 1 file 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 | null; } -interface Connection { - isConnected?: number; +declare global { + var mongoose: MongooseCache | undefined; } -const connection: Connection = {}; +let cached = global.mongoose; -async function dbConnect(): Promise { - 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; -- cgit v1.3.1