2013-05-17 8 views
7

ऐसा लगता है कि मैं Node.js देशी ड्राइवर के साथ एक मोंगोडीबी कनेक्शन बंद नहीं कर सकता। जब मैं node replica.js चलाता हूं तो स्क्रिप्ट कभी समाप्त नहीं होती है, इसलिए किसी कारण से कनेक्शन बंद नहीं किया जा सकता है।Node.js के साथ एक मोंगोडीबी कनेक्शन बंद नहीं कर सकता?

यहां कोड है। यह सेट एक प्रतिकृति है, लेकिन मुझे नहीं लगता कि यह एक समस्या है है:

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(); 
}); 

एक भी mongod उदाहरण से कनेक्ट हो रहा काम करता है ठीक, कनेक्शन बंद कर दिया हो और स्क्रिप्ट, समाप्त हो जाती है process.exit() की जरूरत (robertklep ने सुझाव दिया) के बिना फोन:

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(); 
}); 

उत्तर

5

ऐसा लगता है कि यह एक बग, अब 1.3.6 में तय किया गया था। कुछ दिन पहले this issue I opened देखें। मजाकिया बात यह है कि यह मेरा पहला समय MongoDB के साथ है ...

0

आप close को पहले पैरामीटर के रूप true पारित करके इस मामले में बंद करने के लिए कनेक्शन के पूल के लिए मजबूर करने की आवश्यकता हो सकती। तुम भी जब बंद करने के लिए कोशिश कर रहा है, ताकि आप किसी भी समस्याओं को सतर्क कर दिया जा सकता है एक कॉलबैक प्रदान करना चाहिए:

db.open(function (err, db) { 
    if (err) console.error(err); 

    db.close(true, function (err) { 
     if (err) console.error(err); 
     else console.log("close complete"); 
    }); 
}); 
+0

मेरा दूसरा उदाहरण मजबूर किए बिना क्यों काम करता है, लेकिन मुझे प्रतिकृति सेट के साथ कनेक्शन को बंद करने की आवश्यकता है? – gremo

+0

@Gremo आपको इसकी आवश्यकता नहीं है, लेकिन कुछ अप्रत्याशित चल रहा है। क्या कॉलबैक त्रुटि के बिना बुलाया जाता है? – JohnnyHK

+0

कोई त्रुटि नहीं है। यहां तक ​​कि 'बंद (सत्य)' का उपयोग करने से भी मदद नहीं मिलती है। आपका कोड "पूर्ण पूर्ण" प्रिंट करता है और यह कभी भी स्क्रिप्ट से बाहर नहीं निकलता है। मुझे 'CTRL + C' के साथ मजबूर होना जरूरी है। – gremo

संबंधित मुद्दे