web-dev-qa-db-ja.com

「閉じられていない接続を開こうとしています」というエラーが表示されるのはなぜですか?

ノードアプリをmongoose経由でmongodbに接続しようとしています。ドキュメントを追加できるため、機能しているようですが、エラー_{ [Error: Trying to open unclosed connection.] state: 2 }_が表示されます。

実際のアプリを接続する前に、すべてが正常に機能していることを確認するために、非常にシンプルなアプリを作成しました。

これが私の簡単なアプリです:

_var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var timeSchema = new Schema({ timestamp: String });
var Time = mongoose.model('Time', timeSchema);

mongoose.connect('mongodb://localhost/mydb');

var db = mongoose.connection;

db.on('error', console.error.bind(console, 'connection error: '));
db.once('open', function () {

  var testA = new Test({ timestamp: Date() });

});
_

最後にdb.close()を追加しようとしましたが、違いはありませんでした。

これは、Ubuntu 14.04 VPS上で実行されます:

  • Node.js v0.10.3
  • MongoDB 2.6.3
  • マングース1.4.21
33
Hal Carleton

私の意見では、現在の接続を閉じずに別の接続を作成しようとしています。だから、あなたは使用したいかもしれません:

createConnection()connect()の代わりに。

あなたの場合、次のようになります。

db = mongoose.createConnection('mongodb://localhost/mydb');
59
lvarayut

同じ問題があり、別のファイルに以下の接続があることがわかりました。これが、別のデータベース名で接続できなかった理由です。以下のcreateConnectionが必要です:

db = mongoose.createConnection('mongodb://localhost/mydb');

私が別のファイルに持っていたもの:

db = mongoose.Connection('mongodb://localhost/mydb');
5
Prolasis

mongoose.connect('...');onceを使用してください。

おそらくルートapp.jsまたはindex.jsファイルにあります。すべてのモデルまたはデータベース関連ファイルではなく、それらをインポート(含む)している場合。

とにかく、まだ疑問がある場合は、次の方法で確認できます。

var mongoose = require('mongoose'); 
var db = mongoose.connection;

db.once('connected', function() {
  console.log('mongoDB is connected');
});
2
Mehdi Raash

私は同じ問題を抱えていましたが、それはタイプミスによるものでした:

express-sessions の代わりに express-session

0
King Obi

してはいけません

db.once('open', function () {

  var testA = new Test({ timestamp: Date() });

});

なる

db.once('open', function () {

  var testA = new Time({ timestamp: Date() });

});

「テスト」が異なる接続に基づく異なるスキーマである場合、それは私が思うに影響を与える可能性があります

0
Martian2049