【问题标题】: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

【问题讨论】:

    标签: node.js mongoose node-mongodb-native


    【解决方案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 创建模型。请参阅 stackoverflow.com/a/10200999/3714913 以获得很好的解释。
          猜你喜欢
          • 2013-05-25
          • 1970-01-01
          • 2013-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-27
          相关资源
          最近更新 更多