我正在尝试通过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上运行的:
答案 0 :(得分:59)
在我看来,您正在尝试创建另一个连接而不关闭当前连接。所以,您可能想要使用:
createConnection()代替connect()
。
在您的情况下,它看起来像这样:
db = mongoose.createConnection('mongodb://localhost/mydb');
答案 1 :(得分:4)
我遇到了同样的问题,发现我在另一个文件中有以下连接,这就是我无法连接不同数据库名称的原因。需要以下createConnection
:
db = mongoose.createConnection('mongodb://localhost/mydb');
我在另一个档案中有什么:
db = mongoose.Connection('mongodb://localhost/mydb');
答案 2 :(得分:2)
只需使用mongoose.connect('...');
一次。
可能在您的根 app.js 或 index.js 文件中,如果您要导入(包括)它们,则不在每个模型或数据库相关文件中。
无论如何,如果您仍有疑问,可以通过以下方式查看:
var mongoose = require('mongoose');
var db = mongoose.connection;
db.once('connected', function() {
console.log('mongoDB is connected');
});
答案 3 :(得分:0)
不应该
db.once('open', function () {
var testA = new Test({ timestamp: Date() });
});
是
db.once('open', function () {
var testA = new Time({ timestamp: Date() });
});
如果"测试"是基于不同连接的不同模式,可能会影响我认为
答案 4 :(得分:0)
我有同样的问题,但这是由于一个错字:
express-sessions
代替express-session