| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- // lib/db.js
- import mongoose from "mongoose";
- // Reuse the connection across hot reloads in dev and across route handler invocations.
- const globalForMongoose = globalThis;
- const cached =
- globalForMongoose.__mongooseCache ||
- (globalForMongoose.__mongooseCache = { conn: null, promise: null });
- async function connectMongoose() {
- const uri = process.env.MONGODB_URI;
- if (!uri) {
- throw new Error("MONGODB_URI environment variable is not set");
- }
- if (cached.conn) {
- return cached.conn;
- }
- if (!cached.promise) {
- cached.promise = mongoose
- .connect(uri, {
- // Fail fast if someone queries before we are connected
- bufferCommands: false,
- })
- .then((m) => m);
- }
- cached.conn = await cached.promise;
- return cached.conn;
- }
- /**
- * Returns the native MongoDB db handle (from the active Mongoose connection).
- * This also ensures the Mongoose connection is established.
- */
- export async function getDb() {
- await connectMongoose();
- const db = mongoose.connection?.db;
- if (!db) {
- throw new Error("MongoDB connection is not ready");
- }
- return db;
- }
|