Sembra che non riesca a chiudere una connessione MongoDB con il driver nativo Node.js. Quando eseguo node replica.js
lo script non termina mai, quindi la connessione non può essere chiusa per qualche motivo.Impossibile chiudere una connessione MongoDB con Node.js?
Ecco il codice. Si tratta di un set di repliche, ma non credo che sia un problema:
var mongodb = require('mongodb')
, Db = mongodb.Db
, Server = mongodb.Server
, ReplSet = mongodb.ReplSet;
// Replica set
var replSet = new ReplSet([
new Server('localhost', 27017), // Primary
new Server('localhost', 27018), // Secondary
new Server('localhost', 27016), // Secondary
],
{ rs_name: 'replica', read_secondary: true }
);
var db = new Db('test', replSet, { native_parser: true, w: 1 });
// Opening
db.open(function (err, db) {
if (err) console.error(err);
db.close();
});
Collegamento a una singola istanza mongod funziona bene, il collegamento ottenere chiuso e lo script finisce, senza la necessità (suggerito da robertklep) di process.exit()
chiamare:
var mongodb = require('mongodb')
, Db = mongodb.Db
, Server = mongodb.Server;
// Single instance
var server = new Server('localhost', 27017):
var db = new Db('test', server, { native_parser: true, w: 1 });
// Opening
db.open(function (err, db) {
if (err) console.error(err);
db.close();
});
Perché il mio secondo esempio funziona senza forzare, ma devo forzare la chiusura della connessione con il set di repliche? – gremo
@Gremo Non è necessario, ma qualcosa di inaspettato sta succedendo. Il callback viene chiamato senza errori? – JohnnyHK
Nessun errore. Anche l'uso di 'close (true)' non aiuta. Il tuo codice stampa "close complete" e non esce mai dallo script. Devo forzare la chiusura con 'CTRL + C'. – gremo