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

Posted

技术标签:

【中文标题】为啥我收到错误“尝试打开未关闭的连接。”?【英文标题】:Why am I getting error "Trying to open unclosed connection."?为什么我收到错误“尝试打开未关闭的连接。”? 【发布时间】:2014-10-04 17:03:02 【问题描述】:

我正在尝试通过 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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

【讨论】:

【参考方案2】:

我也遇到了同样的问题,但这是由于打字错误:

express-sessions 而不是express-session

【讨论】:

@Buddy 感谢您的编辑,我应该使用 sn-p【参考方案3】:

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

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

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

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

【讨论】:

【参考方案4】:

你不应该

db.once('open', function () 

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

);

db.once('open', function () 

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

);

如果“测试”是基于不同连接的不同架构,那可能会影响我的想法

【讨论】:

【参考方案5】:

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

createConnection() 而不是connect()

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

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

【讨论】:

谢谢,成功了。真正的问题确实是我试图创建另一个连接。我有第二个脚本,我认为它没有被调用。 重要提示: 确保从您的连接构建模型,而不是直接从“全局”mongoose 变量构建模型,否则将无法保存任何内容。在此示例中,您需要使用db.model() 而不是mongoose.model 创建模型。请参阅 ***.com/a/10200999/3714913 以获得很好的解释。

以上是关于为啥我收到错误“尝试打开未关闭的连接。”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在编译时收到以下错误:[关闭]

为啥我从 tensorflow 网站收到此代码的语法错误? [关闭]

为啥我在 Firebase Cloud Functions 中收到“无效信封”错误? [关闭]

为啥我在此代码中收到 SIGABRT 错误 [关闭]

为啥我在课程课程中收到方法“TopStudents”的错误? [关闭]

为啥我收到错误“Microsoft Visual Studio 2012 已停止工作”(当我单击文本框时)[关闭]