LibreChat/api/lib/db/connectDb.js
2025-05-30 04:28:22 -04:00

57 lines
1.3 KiB
JavaScript

require('dotenv').config();
const mongoose = require('mongoose');
if (!process.env.MONGO_URI) {
throw new Error('Please define the MONGO_URI environment variable');
}
/**
* Global is used here to maintain a cached connection across hot reloads
* in development. This prevents connections growing exponentially
* during API Route usage.
*/
let cached = global.mongoose;
if (!cached) {
cached = global.mongoose = { conn: null, promise: null };
}
async function connectDb(mongoUri = process.env.MONGO_URI) {
if (cached.conn && cached.conn?._readyState === 1) {
return cached.conn;
}
const disconnected = cached.conn && cached.conn?._readyState !== 1;
if (!cached.promise || disconnected) {
const opts = {
bufferCommands: false,
// useNewUrlParser: true,
// useUnifiedTopology: true,
// bufferMaxEntries: 0,
// useFindAndModify: true,
// useCreateIndex: true
};
mongoose.set('strictQuery', true);
cached.promise = mongoose.connect(mongoUri, opts).then((mongoose) => {
return mongoose;
});
}
cached.conn = await cached.promise;
return cached.conn;
}
function getModels() {
return cached.models;
}
module.exports = {
connectDb,
getModels,
get models() {
if (!cached.models) {
throw new Error('Models not registered. ');
}
return cached.models;
},
};