从Node.js v12升级到Node.js v16.4.0后,knex出现故障。

3

我在升级到Node.js v16.4.0(从Node.js v12)后遇到以下错误。

我正在使用knex连接到数据库(postgres),并使用ORM-objection.js

KnexTimeoutError:Knex:超时获取连接。池可能已满。您是否缺少.transacting(trx)调用?

请帮忙解决!

import Knex from "knex";

const getConnection = () => {
    try {
        return Knex({
            client: 'pg',
            connection: {
                user: 'user',
                password: 'password',
                host: 'dbhost',
                port: 5432,
                database: 'dbname',
            },
            pool: {
                min: 0,
                max: 10,
                idleTimeoutMillis: 10000,
                acquireTimeoutMillis: 30000,
            },
            acquireConnectionTimeout: 2000,
        });
    }
    catch (err) {
        throw err;
    }
}

const getTransaction = () => {
    const con = getConnection();
    const trx = con.transaction();
    return trx;    
}


没有足够的信息来确定它来自哪里。可能是您正在创建从未关闭的交易。 - Mikael Lepistö
遇到相同的问题。 - Nedudi
在一个纯净的项目中,我也遇到了同样的问题,只有一个示例查询(见下文)。 尝试了几种解决方法,包括连接池配置和将pg设置为连接限制为-1或100。db .raw('select 1') .then(() => { console.log('已连接到数据库 - OK') }) .catch(err => { console.error('使用${connection}连接到数据库失败:${err}') process.exit(1) }) 使用Node14(也尝试过16、17)、Knex 0.95.13、PG 8.7.1。 - Kleioz
1个回答

1

由于遇到了相同的问题,我追踪到问题出在旧版本的 "pg" 包上。

执行以下命令:

npm i pg@latest

问题得以解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接