2014-07-21 230 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' 
};