I saw a lot of posts and articles about this alert on MongoDB Atlas ("Connections % of configured limit has gone above 80"), but couldn't figure out how to solve it in my Next.js application.
I create my db connection outside the handler function. I used a middleware 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;
This middleware wraps the API endpoint handler.
Now, if I close the connection on every API handler when it finishes, like this:
const { connection } = req;
if (connection) {
connection.close();
}
Than, I'm getting an error on the second request to the same api handler:
MongoError: Topology is closed, please connect
And if i'm not closing the connection, i'm getting this alert (after a short time of use) to my email:
Connections % of configured limit has gone above 80
What is the best practices to work with MongoDB Atlas in a Next.js application?
Thanks!