Node.js Knex:获取连接超时。游泳池可能已经满了。您是否错过了一个.transacting(trx)电话?
我使用以下代码建立knex连接,但经常发生错误 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: {
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(配置);
如果您在代理后工作,则可能会发生此错误,因为您在命令行中的代理未正确配置。请验证envs从“/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(错误); } }
,http\u代理
的情况,您的SO是linux。属性propagateCreateError应设置为false,以防止获取连接的超时。T池可能已满。您是否错过了一个.transacting(trx)呼叫?错误 池配置示例:https\u代理
"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)
这是一个很有用的方法:更新到这些版本解决了我的问题。很明显,节点14刚刚出现,并在knex或pg驱动程序或其他地方损坏了一些东西…连接失败,所有的问题都解决了您得到的是propagationError:false
。在节点14+pg 8.0.2时遇到此问题。将pg更新为8.0.3解决了我的问题!thx@ddriver1为我节省了很多时间。我只更新了pg,问题就解决了。我也确认了这一点!我以前也经历过这一点!在跟踪唯一的更改是升级节点后,我用nvm更改了版本!并且成功了!这一点我又忘记了,这提醒了我!确认了这一点。我在节点14.4.0上,用nvm回到了节点12.14.1(选择了队友使用的版本),一切都很好。Knex:获取连接超时。池可能已满。是否缺少.transacting(trx)call?