为什么我会收到错误“尝试打开未closures的连接”?

我试图通过mongoose将我的节点应用程序连接到mongodb。 这似乎是工作,因为我可以添加文档,但我得到错误{ [Error: Trying to open unclosed connection.] state: 2 }

我创build了一个非常简单的应用程序,只是为了确保连接我的实际应用程序之前,一切工作正常。

这是我的简单的应用程序:

 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
  • mongoose1.4.21

在我看来,你正试图创build另一个连接而不closures当前的连接。 所以,你可能想要使用:

createConnection()而不是connect()

在你的情况下,它看起来像这样:

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

我有同样的问题,发现我有另一个文件中的下面的连接,这是我无法连接一个不同的数据库名称的原因。 下面的createConnection是需要的:

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

我在另一个文件中有什么:

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

只需使用mongoose.connect('...'); 一次

也许在你的根app.jsindex.js文件,而不是在每个模型或数据库相关的文件,如果你正在导入(包括)他们。

无论如何,如果你仍然有疑问,你可以检查它:

 var mongoose = require('mongoose'); var db = mongoose.connection; db.once('connected', function() { console.log('mongoDB is connected'); }); 

不应该你的

 db.once('open', function () { var testA = new Test({ timestamp: Date() }); }); 

 db.once('open', function () { var testA = new Time({ timestamp: Date() }); }); 

如果“testing”是基于不同连接的不同模式,那可能会影响我的想法

我有同样的问题,但这是由于一个错字:

express-sessions而不是express-session