2016-07-18 4 views
2

У меня есть приложение nodejs, которое выполняет миграцию базы данных mongodb.MongoDB соединение не всегда закрывается после подключения.close()

Все это начинается с

MongoClient.connect(`mongodb://${databaseHostname}:${databasePort}/${options.databaseName}`, 
(connectionError, dbConnection) => { 
    if (connectionError) { 
    return cb(connectionError); 
    } 

    console.log('Opened connection to', databaseHostname, options.databaseName); 
    return cb(null, dbConnection); 
}); 

И заканчивается

console.log('Close'); 
dbConnection.close((err) => { 
    if (err) console.log(err); 

    console.log('Closed'); 
}); 

Между ними довольно много происходит, новые коллекции, созданные, документы переставить и т.д. Но никогда новое соединение открыто. Выход приложения является:

Opened connection to localhost testDatabase 

[Много других журналов здесь]

Close 
Closed 

журналов базы данных

2016-07-18T16:54:29.400+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54336 #848 (1 connection now open) 
2016-07-18T16:54:29.423+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54337 #849 (2 connections now open) 
2016-07-18T16:54:29.426+0200 I NETWORK [initandlisten] connection accepted from 127.0.0.1:54338 #850 (3 connections now open) 

[Много вставок и обновлений здесь]

2016-07-18T16:58:06.493+0200 I NETWORK [conn849] end connection 127.0.0.1:54337 (2 connections now open) 
2016-07-18T16:58:06.494+0200 I NETWORK [conn850] end connection 127.0.0.1:54338 (1 connection now open) 

Как вы можете видеть, один mongodb соединение остается открытым, хотя dbConnection.close() получил вызов, препятствующий приложению nodejs выйти. Я смотрю на это уже довольно давно, но не понимаю, что может вызвать такое поведение?

ответ

0

Если вы хотите закрыть соединение, попробуйте ли вы рассмотреть возможность использования .finally() или .then() после того, как ему удалось подключиться?

что-то вроде

MongoClient.connect(`mongodb://${databaseHostname}:${databasePort}/${options.databaseName}`, 
(connectionError, dbConnection) => { 
    if (connectionError) { 
    return cb(connectionError); 
    } 

    console.log('Opened connection to', databaseHostname, options.databaseName); 
    return cb(null, dbConnection); 
}).then(() => { 
dbConnection.close((err) => { 
    if (err) console.log(err); 
    console.log('Closed'); 
    }); 
}); 

Во всяком случае я недавно сделал некоторые исследования по связи MongoDB, несколько они сказали, что не рекомендуется закрыть базу данных. Why is it recommended not to close a MongoDB connection anywhere in Node.js code?

и эта ссылка может помочь вам в дальнейшей работе.

http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html

+0

Эй, я думаю, вы не понимаете проблему. Я не хочу сразу закрыть свою связь, так как я делаю все миграции базы данных между ними. И вы должны закрыть соединение с базой данных, если вы хотите, чтобы ваша программа вышла из строя, поскольку в противном случае она останется открытой. Вы имеете в виду, что вам не следует закрывать соединение, если вы хотите использовать его снова, например. между запросами. – Philiiiiiipp

+0

О, я вижу, возможно, вам стоит попробовать https://github.com/mongodb/node-mongodb-native. используйте команду db.close. Я нашел это из ответа здесь http://stackoverflow.com/a/12368764/3465227 –

Смежные вопросы