Mongoose.js создает несколько соединений с MongoDB с одного вызова connect()
Я делаю одно соединение с MongoDB через Mongoose в приложении Node.js Express:
var express = require('express');
var mongoose = require('mongoose');
mongoose.connect('localhost', 'test');
Затем я определяю схему, затем модели и, наконец, контроллер, который вытаскивает всех пользователей из базы данных:
app.get('/users', function (req, res) {
return User.find(function (err, users) {
if (!err) {
return res.send(users);
}
});
});
Эти подключения DB открываются во время запуска приложения, и они остаются открытыми в течение всего времени приложения Node.js.
Что меня беспокоит, почему у меня открыто 5 подключений? Как только я закрою приложение Node.js, все 5 соединений будут закрыты.
![enter image description here]()
Примечание по теме. Для сервера API REST лучше всегда открывать соединение MongoDB. Или лучше вручную открывать/закрывать соединения для каждого запроса пользователя?
д
Ответы
Ответ 1
Это потому, что Mongoose использует пул из 5 подключений (по умолчанию), которые используются во всем приложении. Для лучшей производительности лучше всего оставить их открытыми.
Вы можете изменить поведение по умолчанию с помощью параметра options на mongoose.connect
. Например:
mongoose.connect('localhost', 'test', { server: { poolSize: 3 }}); // Use 3 connections
Ответ 2
Добавьте этот оператор if, чтобы проверять только когда mongoose отключен, попробуйте подключить его
if (Mongoose.connection.readyState === 0)
mongoose.connect('localhost', 'test');
readyState содержит эти типы:
0: disconnected
1: connected
2: connecting
3: disconnecting