2014-07-21 207 views
6

我在使用mongoose.createConnection方法在每個集羣(worker)連接中使用我的應用程序mongodb(未分片)中使用的集羣模塊中構建的nodejs,並在插入數據後關閉。節點js集羣貓鼬連接

但我期待的是每當有請求時,它打開連接到數據庫和進程請求,並關閉連接。

但是我注意到,當我檢查mongodb日誌仍然打開連接,並且它的計數比處理器/(羣集節點)的數量稍大。

我把poolSize:1,autreconect:false仍然有些連接即使在調用close()方法後也不會關閉。

我的觀察是,當連接錯誤happends的連接不會關閉 請幫我

我使用下面的腳本來獲取連接。

module.exports.getDb = function() { 

    var dburl = 'mongodb://localhost/DB'; 


    db = mongoose.createConnection(dburl, { 
     server: { 
      socketOptions: { 
       keepAlive: 1, 
       connectTimeoutMS: 30000 
      }, 
      auto_reconnect: false, 
      poolSize: 1 

     } 

    }, function (err) { 

     console.log(err) 
    }); 

    db.on('error', function (err) { 
     console.log(err + " this is error"); 
     db.close(); 
    }); 

    return db; 

} 

我在evey查詢回調結束時使用db.close()關閉了連接。

+0

我們可以看到一些代碼嗎? –

+0

我更新了問題,通過添加我的連接腳本,這是在工作進程。 – vimalpt

回答

0

你在找這樣的事嗎?

db.connection.on('error', function (e) { 
    console.log(e + " this is error"); 
    db.close(); 
}); 

對於我的API服務器,我爲Hapi寫了一個插件來處理這個問題。看一看,它可能會幫助你。

'use strict'; 

var bluebird = require('bluebird'); 
var mongoose = bluebird.promisifyAll(require('mongoose')); 

exports.register = function(plugin, options, next) { 

    mongoose.connect(options.mongo.uri, options.mongo.options, function (e) { 
    if (e) { 
     plugin.log(['error', 'database', 'mongodb'], 'Unable to connect to MongoDB: ' + e.message); 
     process.exit(); 
    } 

    mongoose.connection.once('open', function() { 
     plugin.log(['info', 'database', 'mongodb'], 'Connected to MongoDB @ ' + options.mongo.uri); 
    }); 

    mongoose.connection.on('connected', function() { 
     plugin.log(['info', 'database', 'mongodb'], 'Connected to MongoDB @ ' + options.mongo.uri); 
    }); 

    mongoose.connection.on('error', function (e) { 
     plugin.log(['error', 'database', 'mongodb'], 'MongoDB ' + e.message); 
    }); 

    mongoose.connection.on('disconnected', function() { 
     plugin.log(['warn', 'database', 'mongodb'], 'MongoDB was disconnected'); 
    }); 
    }); 

    return next(); 
}; 

exports.register.attributes = { 
    name: 'mongoose', 
    version: '1.0.0' 
};