ノードアプリを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上で実行されます:
私の意見では、現在の接続を閉じずに別の接続を作成しようとしています。だから、あなたは使用したいかもしれません:
createConnection()connect()
の代わりに。
あなたの場合、次のようになります。
db = mongoose.createConnection('mongodb://localhost/mydb');
同じ問題があり、別のファイルに以下の接続があることがわかりました。これが、別のデータベース名で接続できなかった理由です。以下のcreateConnection
が必要です:
db = mongoose.createConnection('mongodb://localhost/mydb');
私が別のファイルに持っていたもの:
db = mongoose.Connection('mongodb://localhost/mydb');
mongoose.connect('...');
onceを使用してください。
おそらくルートapp.jsまたはindex.jsファイルにあります。すべてのモデルまたはデータベース関連ファイルではなく、それらをインポート(含む)している場合。
とにかく、まだ疑問がある場合は、次の方法で確認できます。
var mongoose = require('mongoose');
var db = mongoose.connection;
db.once('connected', function() {
console.log('mongoDB is connected');
});
私は同じ問題を抱えていましたが、それはタイプミスによるものでした:
express-sessions
の代わりに express-session
してはいけません
db.once('open', function () {
var testA = new Test({ timestamp: Date() });
});
なる
db.once('open', function () {
var testA = new Time({ timestamp: Date() });
});
「テスト」が異なる接続に基づく異なるスキーマである場合、それは私が思うに影響を与える可能性があります