Mongoose.js从一个connect()调用中创建多个到MongoDB的连接。

19

我正在使用Node.js Express应用程序中的Mongoose通过单个连接连接到MongoDB:

var express = require('express');
var mongoose = require('mongoose');
mongoose.connect('localhost', 'test');

然后我定义了模式(schema),接着是模型(models),最后是从数据库中检索所有用户的控制器(controller):

app.get('/users', function (req, res) {
  return User.find(function (err, users) {
    if (!err) {
      return res.send(users);
    }
  });
});

这些数据库连接在应用程序启动期间打开,并且在node.js应用程序的整个持续时间内保持打开状态。

让我困扰的是为什么我有5个打开的连接?一旦我关闭node.js应用程序,所有5个连接都会关闭。 enter image description here

相关注释: 对于REST API服务器,始终保持MongoDB连接是否更好?还是最好为每个用户请求手动打开/关闭连接?

2个回答

46

这是因为Mongoose默认使用一个包含5个连接的池,这些连接在整个应用程序中共享。为了获得最佳性能,最好将它们保持打开状态。

您可以通过向mongoose.connect的选项参数传递值来更改默认行为。例如:

mongoose.connect('localhost', 'test', { server: { poolSize: 3 }}); // Use 3 connections

谢谢你的回答,我都快疯了,一直在试图弄清楚为什么它会同时打开5个连接。 - Benny Schmidt
@Benny MongoDB服务器能够同时处理多个请求,特别是读取请求(当服务器拥有超过1个副本时,这种能力更加可用)。然而,一个连接只负责一个请求。 - transang

1

添加此if语句以仅在mongoose断开连接时检查并尝试连接它

if (Mongoose.connection.readyState === 0)
       mongoose.connect('localhost', 'test');

readyState 包含以下类型:

0: disconnected
1: connected
2: connecting
3: disconnecting

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接