Подтвердить что ты не робот

Почему я получаю сообщение об ошибке "Попытка открыть закрытое соединение"?

Я пытаюсь подключить мое приложение 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
4b9b3361

Ответ 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