18

我正在 Node.js Express 应用程序中通过 Mongoose 与 MongoDB 建立单一连接:

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);
    }
  });
});

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

困扰我的是为什么我打开了 5 个连接?一旦我关闭 node.js 应用程序,所有 5 个连接都将关闭。 在此处输入图像描述

相关说明:对于 REST API 服务器,最好始终打开 MongoDB 连接。还是根据每个用户请求手动打开/关闭连接更好?d

4

2 回答 2

46

这是因为 Mongoose 使用了一个由 5 个连接组成的池(默认情况下),这些连接在整个应用程序中共享。为了获得最佳性能,最好让它们保持打开状态。

您可以通过 options 参数将默认行为更改为mongoose.connect. 例如:

mongoose.connect('localhost', 'test', { server: { poolSize: 3 }}); // Use 3 connections
于 2012-09-29T20:54:30.743 回答
1

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

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

readyState 包含以下类型:

0: disconnected
1: connected
2: connecting
3: disconnecting
于 2019-07-20T09:32:30.223 回答