Node.js 节点通用池错误[db对象已连接,无法多次调用open]
我刚刚尝试在我的博客应用程序中使用,下面是我的代码: db.jsNode.js 节点通用池错误[db对象已连接,无法多次调用open],node.js,mongodb,Node.js,Mongodb,我刚刚尝试在我的博客应用程序中使用,下面是我的代码: db.js module.exports = function () { return new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT), {safe: true}); } var Db = require('./Db'); var pool = poolModule.Pool({ name : 'mongoPo
module.exports = function () {
return new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT), {safe: true});
}
var Db = require('./Db');
var pool = poolModule.Pool({
name : 'mongoPool',
create : function(callback) {
var mongodb = Db();
callback(null, mongodb);
},
destroy : function(mongodb) {
mongodb.close();
},
max : 100,
min : 3,
idleTimeoutMillis : 30000,
log : true
});
post.js
module.exports = function () {
return new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT), {safe: true});
}
var Db = require('./Db');
var pool = poolModule.Pool({
name : 'mongoPool',
create : function(callback) {
var mongodb = Db();
callback(null, mongodb);
},
destroy : function(mongodb) {
mongodb.close();
},
max : 100,
min : 3,
idleTimeoutMillis : 30000,
log : true
});
用法
pool.acquire(function (error, mongodb) {
mongodb.open(function (error, db) {
pool.release(mongodb)
// do something
});
})
由于我为池设置了min属性(这里是3),在我刷新页面大约3次后,页面会断开并发出警告:db对象已连接,无法多次调用open
当我将min设置为5时,当我刷新大约5次后,它再次崩溃
为什么会这样
提前感谢当您从池中获取实例时,is会检查是否有免费实例并返回它。如果不是免费实例,或者它没有获得实例的最小配置,它将使用create函数创建一个新实例 因此,在您的情况下,在3次之后(当min=3时),它将返回给您之前使用的实例。这意味着你将在第二次mongodb.open上运行它
您的mongodb.open(函数(错误,db)应该在池的创建功能中。这是合理的。但我不明白为什么我们不能打开它两次,因为每次我创建一个新的Db实例时,都在Db.js中设置。返回以前使用的实例意味着什么?谢谢!你不必每次创建一个新的Db实例。我们将
min
设置为3,因此我们打开了它连接到数据库。一旦我们到达边缘,一个新的请求进入,它将调用create
函数,该函数返回newdb()
(在db.js中设置),不是吗?不。在创建了3个连接后,您开始获得释放回池的连接。这意味着,您获得了一个使用Db创建的连接,然后在该连接上运行open并将其释放回池。现在,您获得的连接已打开。