为什么我收到错误"试图打开未关闭的连接."?

Hal*_*ton 33 mongoose node.js node-mongodb-native

我正在尝试通过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() });

});
Run Code Online (Sandbox Code Playgroud)

我也试过添加db.close()到最后,但它没有任何区别.

这是在Ubuntu 14.04 VPS上运行的:

  • Node.js v0.10.3
  • MongoDB 2.6.3
  • 猫鼬1.4.21

lva*_*yut 60

在我看来,你试图创建另一个连接而不关闭当前的连接.所以,您可能想要使用:

createConnection()而不是connect().

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

db = mongoose.createConnection('mongodb://localhost/mydb');
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,做到了.真正的问题确实是我试图创建另一个连接.我有第二个脚本,我认为没有被调用. (2认同)
  • **重要事项:**确保从您的连接构建模型,而不是直接从'global'mongoose变量构建模型,否则不会保存任何内容.在此示例中,您需要使用`db.model()`而不是`mongoose.model`创建模型.有关详细说明,请参见http://stackoverflow.com/a/10200999/3714913. (2认同)

Pro*_*sis 5

我遇到了同样的问题,发现在另一个文件中具有以下连接,这就是为什么无法使用其他数据库名称进行连接的原因。createConnection需要以下内容:

db = mongoose.createConnection('mongodb://localhost/mydb');
Run Code Online (Sandbox Code Playgroud)

我在另一个文件中的内容:

db = mongoose.Connection('mongodb://localhost/mydb');
Run Code Online (Sandbox Code Playgroud)