客户端"/>
MongoNotConnectedError:在生产中运行操作之前必须连接客户端
import mongoose from "mongoose";
let connection = {};
async function connect() {
try {
if (connection.isConnected) {
console.log('Connected');
return;
}
if (mongoose.connections.length > 0) {
connection.isConnected = mongoose.connections[0].readyState;
if (connection.isConnected === 1) {
console.log("Previous Connection Established");
return;
}
await mongoose.disconnect();
}
const db = await mongoose.connect(process.env.MONGODB_URI);
console.log("New Connection");
connection.isConnected = db.connections[0].readyState;
} catch (error) {
console.error("Error connecting to database:", error);
process.exit(1);
}
}
async function disconnect() {
if (connection.isConnected) {
if (process.env.NODE_ENV === "production") {
await mongoose.disconnect();
connection.isConnected = false;
} else {
console.log("Still Connected");
}
}
}
const db = { connect, disconnect };
export default db;
这是我在 nextjs 和猫鼬中使用的数据库函数,但不断收到此错误。 我尝试了很多解决方案,但这个错误一直存在。
export async function getServerSideProps() {
await db.connect();
const products = await Product.find().lean();
await db.disconnect();
return {
props: {
Products: JSON.parse(JSON.stringify(products)),
},
};
}
这就是我调用 mongodb 函数的方式
请告诉我哪里错了或如何解决。
我尝试使用 digitalocean 集成的 mongodb 服务器,但他们没有抛出这个错误。 Mongodb官网集群出现了这个问题。 我正在使用 mongodb 无服务器实例,每次都会收到此错误。请帮我解决这个问题。
回答如下:打开/关闭连接是昂贵的操作,你不需要每次都关闭连接,除非应用程序正在关闭。
Mongoose 模块是一个为你处理连接池的单例实例,所以你可以在你的模块中导入和共享它。
import mongoose from 'mongoose';
async function init() {
try {
await mongoose.connect(process.env.MONGO_URI); //set your connection string
} catch (err) {
//if connection was not successfull, shutdown app
process.exit(1);
}
}
async function App() {
const connection = await db.init();
const User = mongoose.model('User');
const user = await User.findOne().exec();
console.log(user);
}
更多推荐
MongoNotConnectedError:在生产中运行操作之前必须连接客户端
发布评论