Wygląda na to, że nie mogę zamknąć połączenia MongoDB z natywnym sterownikiem Node.js. Po uruchomieniu node replica.js
skrypt nigdy się nie kończy, dlatego połączenie nie może zostać zamknięte z jakiegoś powodu.Nie można zamknąć połączenia MongoDB z Node.js?
Oto kod. Jest to replika ustawiona, ale nie sądzę, że jest to problem:
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();
});
Podłączenie do jednej instancji mongod działa dobrze, gra się zamknięte i skrypt kończy, bez potrzeby (sugerowane przez robertklep) z process.exit()
zadzwoń:
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();
});
Dlaczego mój drugi przykład działa bez forsowania, ale muszę wymusić zamknięcie połączenia z zestawem replik? – gremo
@Gremo Nie powinieneś tego robić, ale dzieje się coś nieoczekiwanego. Czy wywołanie zwrotne jest wywoływane bez błędu? – JohnnyHK
Brak błędów. Nawet użycie 'close (true)' nie pomaga. Twój kod wypisuje "close complete" i nigdy nie wychodzi ze skryptu. Muszę zbliżyć się do "CTRL + C". – gremo