我怎样才能摆脱这个 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 虚拟项目?如果我在外部编译,我怎样才能摆脱它?

我怎样才能摆脱 CodeMirror div ?为啥我有它?

我怎样才能用 mongodb 编写这个查询? [复制]

我怎样才能摆脱这么多的调度?

Alamofire 打印“可选(数据)”,我怎样才能摆脱“可选”