18

Node.jsExpressアプリで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);
    }
  });
});

これらのDB接続は、アプリケーションの起動時に開き、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ステートメントを追加して、マングースが切断されたときにのみチェックし、接続してみます

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

readyStateには次のタイプが含まれます:

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