为什么我收到错误“尝试打开未关闭的连接。”?

问题描述 投票:0回答:5

我正在尝试通过 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
javascript node.js mongodb mongoose
5个回答
61
投票

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

createConnection() 而不是

connect()

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

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

6
投票

我遇到了同样的问题,发现我在另一个文件中有以下连接,这就是我无法使用不同的数据库名称连接的原因。需要以下

createConnection

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

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

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

2
投票

只需使用

mongoose.connect('...');
一次

可能在您的根 app.jsindex.js 文件中,而不是在每个模型或数据库相关文件中(如果您要导入(包括)它们)。

无论如何,如果您还有疑问,可以通过以下方式检查:

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

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

0
投票

你不应该

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

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

});

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

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

});

如果“测试”是基于不同连接的不同模式,这可能会影响我认为


0
投票

我也遇到了同样的问题,但这是由于拼写错误造成的:

express-sessions
而不是
express-session

© www.soinside.com 2019 - 2024. All rights reserved.