Node.js Knex:获取连接超时。游泳池可能已经满了。您是否错过了一个.transacting(trx)电话?

Node.js Knex:获取连接超时。游泳池可能已经满了。您是否错过了一个.transacting(trx)电话?,node.js,knex.js,Node.js,Knex.js,我使用以下代码建立knex连接,但经常发生错误 Knex:获取连接超时。游泳池可能已经满了。您是否错过了一个.transacting(trx)电话 有人能为这个问题提出解决方案吗 var knexConn = reqKnex({ client: pClient, native: false, connection: pConn, searchPath: pSearchPath, pool: {

我使用以下代码建立knex连接,但经常发生错误

Knex:获取连接超时。游泳池可能已经满了。您是否错过了一个.transacting(trx)电话

有人能为这个问题提出解决方案吗

var knexConn = reqKnex({
        client: pClient,
        native: false,
        connection: pConn,
        searchPath: pSearchPath,
        pool: {
            max: 7,
            min: 3,
            acquireTimeout: 60 * 1000
        }
    });


function getTransactionScope(pKnex, callback) {
    try {
        pKnex.transaction(function(trx) {
            return callback(trx);
        });
    } catch (error) {
        console.log(error);
    }
}

function ExecuteSQLQuery(pTranDB, pTrx, pQuery, pCallback) {
    try {
        var query = pTranDB.raw(pQuery);

        if (pTrx) {
            query = query.transacting(pTrx);
        }
        query.then(function(res, error) {
            try {
                if (error) {
                    console.log(error);
                } else {
                    return pCallback(res, error);
                }
            } catch (error) {
                console.log(error);
            }
        }).catch(function(error) {
            return pCallback(null, error);
        });
    } catch (error) {
        console.log(error);
    }
}

function Commit(pTrx, pIsCommit) {
    try {
        if (pIsCommit) {
            pTrx.commit();
        } else {
            pTrx.rollback();
        }
    } catch (error) {
        console.log(error);
    }
}
我也有同样的问题, 考虑到:

属性propagateCreateError应设置为false以防止超时 获取连接。游泳池可能已经满了。您是否错过了一个.transacting(trx)电话?错误

池配置示例:

"engines": {
  "node": ">=10.0.0",
  "npm": ">=6.0.0"
},
"pool": {
  "min": 2,
  "max": 6,
  "createTimeoutMillis": 3000,
  "acquireTimeoutMillis": 30000,
  "idleTimeoutMillis": 30000,
  "reapIntervalMillis": 1000,
  "createRetryIntervalMillis": 100,
  "propagateCreateError": false // <- default is true, set to false
},
“池”:{ “min”:2, “最大”:6, “createTimeoutMillis”:3000, “acquireTimeoutMillis”:30000, “idleTimeoutMillis”:30000, “reapIntervalMillis”:1000, “createRetryIntervalMillis”:100,
“propagateCreateError”:false/我用这些版本解决了这个问题:

"knex": "^0.21.1",
"objection": "^2.1.3",
"pg": "^8.0.3"

当我升级到node
14.0.0
时,我也遇到了这个问题。我恢复了我的node版本,这个问题就消失了。

我最近遇到了这个问题,我刚刚更新到node v14.2.0

这个版本似乎对knex进行了突破性的更改。幸运的是我有NVM,所以我切换到了另一个版本(v12.16.3),这解决了这个问题


祝你好运!

我在heroku部署strapi应用程序时遇到了同样的问题。 在my package.json中,我有以下版本:

"knex": "^0.21.1",
"objection": "^2.1.3",
"pg": "^8.0.3"

  • “knex”:“对于其他遇到此问题的人,这也可能是由于您的数据库主机名输入错误造成的(就像我的情况一样)。

    在我面临的应用程序中(介于两者之间的某个时间)

    我的knex配置是

    const config=client:process.env.client,
    连接:{
    主机:process.env.DBHOST,
    用户:process.env.DBUSER,
    密码:process.env.DBPASS,
    数据库:process.env.database
    },
    池:{min:0,max:30,acquireTimeoutMillis:60*1000},
    种子:{
    目录:'./db/sds'
    },
    迁移:{
    目录:'./db/mg'
    }
    }
    从“knex”进口knexLib;
    导出常数con=knexLib(配置);
    
    我用的是这样的

    从“/con”导入{con};
    从“../err”导入{FormatError}
    常量处理程序=(请求)=>{
    const trx=con.transaction();
    试一试{
    const result=await con('insert-table')。事务处理(trx)。插入(请求列表)。返回('*');
    const resultOfLog=等待承诺。全部(
    结果.map((o)=>{
    返回con('日志表')
    .insert({event_id:1,resource:o.id});
    })
    );
    返回结果;
    }捕获(错误){
    返回新的FormatError(错误);
    }
    }
    
    如果您在代理后工作,则可能会发生此错误,因为您在命令行中的代理未正确配置。请验证envs
    http\u代理
    https\u代理
    的情况,您的SO是linux。

    属性propagateCreateError应设置为false,以防止获取连接的超时。T池可能已满。您是否错过了一个.transacting(trx)呼叫?错误

    池配置示例:

    "engines": {
      "node": ">=10.0.0",
      "npm": ">=6.0.0"
    },
    
    "pool": {
      "min": 2,
      "max": 6,
      "createTimeoutMillis": 3000,
      "acquireTimeoutMillis": 30000,
      "idleTimeoutMillis": 30000,
      "reapIntervalMillis": 1000,
      "createRetryIntervalMillis": 100,
      "propagateCreateError": false // <- default is true, set to false
    },
    
    “池”:{
    “min”:2,
    “最大”:6,
    “createTimeoutMillis”:3000,
    “acquireTimeoutMillis”:30000,
    “idleTimeoutMillis”:30000,
    “reapIntervalMillis”:1000,
    “createRetryIntervalMillis”:100,
    “propagateCreateError”:false//RDS->AuroraDB实例->连续几分钟不活动后暂停计算容量:1440小时以防止数据库完全进入睡眠状态

    有关详细说明,请参见

    (您是否有
    .transacting(trx)
    (或关闭)呼叫(动态)?)你有没有发现这个问题?有没有人能够解决这个错误?有没有人找到这个错误的解决方案?不要使用
    propagationError:false
    这是一个很有用的方法:更新到这些版本解决了我的问题。很明显,节点14刚刚出现,并在knex或pg驱动程序或其他地方损坏了一些东西…连接失败,所有的问题都解决了您得到的是
    Knex:获取连接超时。池可能已满。是否缺少.transacting(trx)call?
    。在节点14+pg 8.0.2时遇到此问题。将pg更新为8.0.3解决了我的问题!thx@ddriver1为我节省了很多时间。我只更新了pg,问题就解决了。我也确认了这一点!我以前也经历过这一点!在跟踪唯一的更改是升级节点后,我用nvm更改了版本!并且成功了!这一点我又忘记了,这提醒了我!确认了这一点。我在节点14.4.0上,用nvm回到了节点12.14.1(选择了队友使用的版本),一切都很好。