Node.js 节点通用池错误[db对象已连接,无法多次调用open]

Node.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

我刚刚尝试在我的博客应用程序中使用,下面是我的代码:

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     : '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并将其释放回池。现在,您获得的连接已打开。