You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS连接MongoDB报错:尝试从已关闭连接池获取连接

MongoDB查询报错:attempted to check out a connection from closed connection pool

问题现象

仅建立MongoDB连接不执行查询时无异常,执行查询操作后控制台抛出错误attempted to check out a connection from closed connection pool,连接状态仍返回true,客户端在useEffect钩子中输出{},无法正常获取数据库数据。

问题原因

  1. 异步查询未等待完成就关闭连接:getServerSideProps中toArray()是异步操作,但未添加await,导致代码直接执行await client.close(),此时查询仍在后台执行,连接池已被关闭,查询尝试获取连接时触发错误。
  2. 客户端未复用:getClient每次调用都会创建新的MongoClient实例并发起连接,频繁创建、销毁连接不仅效率低下,还可能引发连接池相关异常。

解决方案

1. 修复查询异步等待逻辑

给查询链末尾的toArray()添加await,确保查询完成后再执行后续操作。

2. 复用MongoClient实例(官方推荐)

利用Node.js模块缓存实现单例客户端,避免重复创建连接。

修改后代码

优化后的MongoDB初始化代码

const { MongoClient } = require('mongodb');

// 模块缓存实现单例客户端,避免重复创建连接
let clientPromise;

export function getClient() {
  if (!process.env.MONGODB_URI) throw new Error("Invalid/missing database key");

  if (!clientPromise) {
    const uri = process.env.MONGODB_URI;
    const options = {};
    const client = new MongoClient(uri, options);
    clientPromise = client.connect();
    console.log("connected to development database");
  }

  return clientPromise;
}

修复后的getServerSideProps代码

export async function getServerSideProps(context: any) {
  try {
    const client = await getClient();
    const db = client.db("db-name"); // db()为同步方法,无需await

    // 添加await等待查询完成
    const post = await db
      .collection("articles")
      .find({"type": "nouvelle"}, {
        projection: { "_id": 0, "title": 1, "titleSlug": 1, "type": 1, "imageUrl": 1, "author": 1 }
      })
      .sort({ $natural: -1 })
      .limit(2)
      .toArray();

    // 复用客户端时无需每次请求关闭,除非明确要销毁连接
    // await client.close(); 

    return {
      props: { isConnected: true, post: JSON.parse(JSON.stringify(post)) },
    };
  } catch (e) {
    console.error(e);
    return {
      props: { isConnected: false, post: null },
    };
  }
}

额外说明

  • client.db()是同步方法,原代码中的await属于多余操作,可直接移除。
  • 复用MongoClient实例是MongoDB官方推荐的最佳实践,能有效减少连接开销,避免连接池相关问题。

内容的提问来源于stack exchange,提问作者Horkos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:00:11