我已经创建了一个免费层MongoDB集群,我从MongoDB得到了这个消息:You are receiving this alert email because connections to your cluster(s) have exceeded 500, and is nearing the connection limit for the M0 cluster HSDevCluster in the Project Halal Spisesteder Development within Organization YouBen. Please restart your application or login to your Atlas account to see some suggested solutions.
我的数据库配置看起来像这样:
const { MongoClient } = require('mongodb');
// MongoDB connection string
const mongoURI = process.env.MONGODB_URI;
const dbName = process.env.DATABASE_NAME;
// Create a new MongoClient instance
const client = new MongoClient(mongoURI);
async function connectToMongoDB() {
try {
// Connect to the MongoDB server
await client.connect();
// Get the database instance
const db = client.db(dbName);
return db;
} catch (error) {
console.error('MongoDB connection error:', error);
throw error;
}
}
module.exports = {
connectToMongoDB,
};
然后我有这个路由器:
const express = require('express');
const router = express.Router();
const { connectToMongoDB } = require('../../database/database'); // Import the MongoDB
connection function
// Define an endpoint to fetch restaurant data
router.get('/restaurants', async (req, res) => {
try {
const db = await connectToMongoDB();
const restaurants = await db
.collection('restaurants')
.find({ registrationStatus: "Active" })
.sort({ averageRating: -1, numberOfReviews: -1 })
.toArray();
console.log("fetch successful");
res.json(restaurants);
} catch (error) {
console.error(error);
res.status(500).json({ error: 'Internal server error' });
}
});
module.exports = router;
是因为我使用它们后没有再次关闭连接,还是这里到底有什么问题,我该如何解决?
3条答案
按热度按时间ovfsdjhp1#
M0集群有一个连接限制,你需要显式关闭以阻止它蔓延。我已经修改了你的代码,并使用了一个client.close(),希望能解决这个问题。
8oomwypt2#
这是因为每次你调用端点时,都会创建一个新的连接,并且由于你没有使用:
因此,在数据库配置文件中,在connectToMongoDB()下面添加另一个函数closeMongoDBConnection(),如下所示:
现在,在你的路由中,在finally()块中的右括号之前调用这个**closeMongoDBConnection()**函数:
oug3syen3#
每次你调用connectToMongoDB(),你都打开了一个到MongoDB的新连接,但在你完成它之后,你并没有关闭它。
选项一:重复使用连接
选项二:密切联系