Почему я получаю сообщение об ошибке "Попытка открыть закрытое соединение"?
Я пытаюсь подключить мое приложение node к mongodb через mongoose. Кажется, он работает, поскольку я могу добавить документы, но получаю сообщение об ошибке { [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
- Mongoose 1.4.21
Ответы
Ответ 1
По-моему, вы пытаетесь создать другое соединение, не закрывая текущий. Таким образом, вы можете использовать:
createConnection() вместо connect()
.
В вашем случае это будет выглядеть так:
db = mongoose.createConnection('mongodb://localhost/mydb');
Ответ 2
У меня была такая же проблема, и я обнаружил, что у меня было соединение ниже в другом файле, поэтому я не мог подключиться к другому имени базы данных. Требуется ниже createConnection
:
db = mongoose.createConnection('mongodb://localhost/mydb');
Что я имел в другом файле:
db = mongoose.Connection('mongodb://localhost/mydb');
Ответ 3
просто используйте mongoose.connect('...');
один раз.
может быть в вашем корневом файле app.js или index.js, а не в каждой модели или файлах, связанных с базой данных, если они импортируют (в том числе) их.
В любом случае, если у вас все еще есть сомнения, вы можете проверить его:
var mongoose = require('mongoose');
var db = mongoose.connection;
db.once('connected', function() {
console.log('mongoDB is connected');
});
Ответ 4
не должен
db.once('open', function () {
var testA = new Test({ timestamp: Date() });
});
be
db.once('open', function () {
var testA = new Time({ timestamp: Date() });
});
Если "Тест" - это другая схема, основанная на другом соединении, это может повлиять на я думаю
Ответ 5
У меня была такая же проблема, но это было из-за опечатки:
express-sessions
вместо express-session