Ну, каждый раз, когда вызывается ваш маршрут /products
, вы создаете новый экземпляр MongoClient.В этой степени, чтобы ограничить количество подключений к вашей базе данных, вы можете подключиться один раз и сохранить свой экземпляр MongoClient:
let client = undefined;
const connection = (closure) => {
// Return the client if any...
if(client) return closure(client);
return MongoClient.connect(config.connectionString, (err, c) => {
if (err) {
return winston.log('error', now() + err);
}
// Save the client.
client = c;
closure(client);
});
};
... или просто закрыть подключение MongoClient, которое высоздание экземпляра, как только вы закончите с ним:
router.get('/products', (req, res) => {
connection((client) => {
client.db('dbname').collection('collectionname')
.find({})
.toArray()
.then((products) => {
response.data = products;
response.message = "Products retrieved successfully!"
// Close the MongoClient...
client.close();
res.json(response);
})
.catch((err) => {
winston.log('error', now() + err);
sendError(err, res);
// Close the MongoClient...
client.close();
});
});
});
Я бы посоветовал вам перейти к первому решению: MongoClient поддерживает пул соединений, поэтому наличие нескольких клиентов не дает никаких преимуществ.Кроме того, он позволяет вам проверить, доступна ли БД удаленно, прежде чем выполнять что-либо еще (просто подключитесь к БД в приложении init () и сохраните экземпляр клиента, и все будет готово).