Как закрыть все подключения к серверу MongoDB - PullRequest
1 голос
/ 12 января 2012

Я использую Node MongoDB для собственного драйвера для подключения к базе данных MongoDB:

// Open a connection
db.open(function (err, db) {
  db.close();
});

// Open another connection
db.open(function (err, db) {
  db.close();
});

Я видел два принятых соединения в файле mongodb.log, но только одно конечное соединение. И программа не вышла, я думаю, она все еще ждет закрытия второго соединения. Как закрыть все соединения?

1 Ответ

2 голосов
/ 12 января 2012

Вы скрываете переменную db с параметром обратного вызова.

Попробуйте вместо этого.

// Open a connection
db.open(function (err, p_db) {
  db.close();
}); 

// Open another connection
db.open(function (err, p_db) {
  db.close();
});

Обновление: Ладно, наверное, я запутался в параметрах обратного вызова, извините. Ваша проблема (из сущности) заключается в том, что вы выполняете два db.opens с одним и тем же объектом db, прежде чем закрывать их. Кроме того, похоже, что вам нужны отдельные объекты сервера, если вы не делаете вещи в последовательности.

Итак, вы могли бы вместо этого, если вы хотите гарантировать это в последовательности, (также, у меня, похоже, не определена версия mongodb, поэтому я изменил ее на подключенную): 1011 *

console.log('[1]', db.serverConfig.connected);
db.open(function (err, db) {
  console.log('[2]', err, db.serverConfig.connected);
  db.close();
  console.log('[3]', err, db.serverConfig.connected);

  console.log('[4]', db.serverConfig.connected);
  db.open(function (err, db) {
    console.log('[5]', err, db.serverConfig.connected);
    db.close();
    console.log('[6]', err, db.serverConfig.connected);
  });
});

Какие отпечатки:

[1] false
[2] null true
[3] null false
[4] false
[5] null true
[6] null false

В качестве альтернативы, вы можете определить две переменные в БД, но вам также нужно определить две серверные переменные, или они зависают после закрытия первой. Вот так:

var mongodb  = require('mongodb')
  , server   = new mongodb.Server('localhost', 27017, {})
  , server2   = new mongodb.Server('localhost', 27017, {})
  , db       = new mongodb.Db('test', server, {})
  , db2       = new mongodb.Db('test', server2, {})
  ;

console.log('[1]', db.serverConfig.connected);
db.open(function (err, db) {
  console.log('[2]', err, db.serverConfig.connected);
  db.close();
  console.log('[3]', err, db.serverConfig.connected);
});

console.log('[4]', db2.serverConfig.connected);
db2.open(function (err, db2) {
  console.log('[5]', err, db2.serverConfig.connected);
  db2.close();
  console.log('[6]', err, db2.serverConfig.connected);
});

Какие отпечатки (для меня, и я думаю, вы не можете рассчитывать на порядок 1,4,2,3 ...):

[1] false
[4] false
[2] null true
[3] null false
[5] null true
[6] null false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...