我在我的应用程序 mongodb(未分片)中使用内置集群模块的 nodejs 用于 每个 cluster(worker) 连接中的存储是使用 mongoose.createConnection 方法创建的,并在插入数据后关闭。
但我期望的是,无论何时发出请求,它都会打开与数据库的连接并处理请求并关闭连接。
但是我注意到当我检查 mongodb 日志时仍然打开连接并且它的计数略大于处理器/(集群 Node )的数量。
并且我设置了 poolSize:1,autreconect:false 即使在调用 close() 方法后仍然有一些连接没有关闭。
我的观察是当连接错误发生时连接没有关闭 请帮助我
我正在使用以下脚本来获取连接。
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;
}
我在每次查询回调结束时使用 db.close() 关闭连接。
最佳答案
你在找这样的东西吗?
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'
};
关于node.js - Node js集群 Mongoose 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24858225/