我怎样才能摆脱这个 MongoDB 错误? mongoose MongoNotConnectedError: MongoClient must be connected to perform this
Posted
技术标签:
【中文标题】我怎样才能摆脱这个 MongoDB 错误? mongoose MongoNotConnectedError: MongoClient must be connected to perform this operation【英文标题】:How can I get rid of this MongoDB error? mongoose MongoNotConnectedError: MongoClient must be connected to perform this operation 【发布时间】:2022-01-05 22:58:32 【问题描述】:请我将 MongoDB 数据库用于我的下一个应用程序,这是我 Bootcamp 的最终项目,并且由于我总是收到 mongoclient not connected 错误,因此这个错误阻止了我对我的数据库进行查询。
我正在使用猫鼬,并且在升级到最新的 mui(材料 UI)后开始出现此错误,因为这就是我用于此应用程序的内容。从昨天开始,我一直在尝试修复这个错误,因为我认为这是我可以处理的,但直到现在它仍然存在。它已经从这个mongoose MongoNotConnectedError: MongoClient must be connected to perform this operation and this one
MongoExpiredSessionError:无法使用已结束的会话开始,并且它发生在每个单击向数据库发出请求的按钮上。
下面是我用来通过 mongoose 连接到 MongoDB 的代码:
import mongoose from 'mongoose';
const connection = ;
async function connect()
if (connection.isConnected)
console.log('already connected');
return;
if (mongoose.connections.length > 0)
connection.isConnected = mongoose.connections[0].readyState;
if (connection.isConnected === 1)
console.log('use previous connection');
return;
await mongoose.disconnect();
const db = await mongoose.connect(process.env.MONGODB_URI,
useNewUrlParser: true,
useUnifiedTopology: true,
);
console.log('new connection');
connection.isConnected = db.connections[0].readyState;
async function disconnect()
if (connection.isConnected)
if (process.env.NODE_ENV === 'production')
await mongoose.disconnect();
connection.isConnected = false;
else
console.log('not disconnect');
function convertDocToObj(doc)
doc._id = doc._id.toString();
doc.createdAt = doc.createdAt.toString();
doc.updatedAt = doc.updatedAt.toString();
return doc;
const db = connect, disconnect, convertDocToObj ;
export default db;
如果有人能帮我解决这个问题,我将非常感激。我不知道是什么原因造成的,也不知道它是从哪里来的,因为我已经尽我所能,但无济于事 谢谢
【问题讨论】:
【参考方案1】:我看到您正在使用 mongo URL 作为带有MONGODB_URI
的环境变量。
您是否安装了dotenv
模块?你在你的应用程序中require('dotenv').config()
了吗? `.env 文件在你项目的根目录下吗?
如果是这样,如果您使用的是 MongoDB Atlas,请确保您的 .env
文件中的 URL 是正确的。当您从 MongoDB Atlas 生成连接字符串时,它会在名为 myFirstDatabase
或类似名称的 URL 字符串中提供一个默认数据库。将其更改为您要连接的数据库。
【讨论】:
非常感谢您的回答,并回答您的问题。我没有安装任何额外的 dotenv 包,我只是创建了一个 .env 文件,按照你的回答我应该安装一个 dotenv 包,这个 require('dotenv').config() 是我应该放在顶部的我在 dotenv 文件或创建数据库连接的 db.js 文件中的应用程序?.. 是的,我正在使用 Atlas,我将 myFirstDatabase 更改为我要连接的数据库的名称,并且还具有正确的用户名和密码。请指导我配置应该存在的文件..谢谢 只需转到dotenv
文档here 并按照使用部分进行操作。非常直接。
好的,非常感谢,我会这样做的。
乐于助人。如果这回答了您的问题,请接受此答案。
您好,非常感谢您的回答,是的,这解决了我的问题.. 我很感激以上是关于我怎样才能摆脱这个 MongoDB 错误? mongoose MongoNotConnectedError: MongoClient must be connected to perform this的主要内容,如果未能解决你的问题,请参考以下文章
我怎样才能摆脱错误-TypeError:无法读取未定义的属性'8'
什么是 Visual Studio TypeScript 虚拟项目?如果我在外部编译,我怎样才能摆脱它?