[我在MongoDB Atlas上看到了很多有关此警报的文章和文章(“连接数已配置的限制已超过80”,但无法在Next.js应用程序中弄清楚如何解决它。
我在处理程序函数之外创建数据库连接。我使用了中间件withDatabase.js
:
const client = new MongoClient(process.env.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
});
const addDbToRequest = (handler, req, res) => {
req.db = req.connection.db("MYDBNAME");
return handler(req, res);
};
const withDatabase = handler => async (req, res) => {
if (!client.isConnected()) {
await client.connect();
}
req.connection = client;
return addDbToRequest(handler, req, res);
};
export default withDatabase;
此中间件包装了API端点处理程序。
现在,如果完成时我关闭了每个API处理程序上的连接,如下所示:
const { connection } = req;
if (connection) {
connection.close();
}
谢谢,我在对相同api处理程序的第二个请求中遇到错误:
MongoError: Topology is closed, please connect
并且,如果我没有关闭连接,则我会在短时间使用后收到此警报:
Connections % of configured limit has gone above 80
在Next.js应用程序中与MongoDB Atlas一起使用的最佳实践是什么?
谢谢!
由于以下原因,应重新使用该连接:
How do I manage MongoDB connections in a Node.js web application?
默认MongoClient
配置将每个池的最大连接数(poolSize
)设置为5
。因此,如果仅运行一个应用程序实例并像您一样检查客户端是否已连接,则在MongoDB Atlas中看到的连接不应超过5个。
if (!client.isConnected()) {
await client.connect();
}
注意,在开发模式(next dev
)中,Next.js在每个请求上都会“重新启动”,似乎会影响MongoClient
缓存并创建许多连接。但是,在生产模式下,您不应遇到此问题。