graphql - Strapi 嵌套,返回错误 Knex:获取连接超时。游泳池可能已经满了。你错过了一个 .transacting(trx) 电话
问题描述
我有这个查询:
query{
employees{
fullname
department
position
presences(where:{created_at_gt:"20200401"}){
created_at
Status
}
}
}
它返回错误:
errors": [
{
"message": "Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?",
...
但是当我将查询更改为:
query{
presences(where:{created_at_gt:"20200401"}){
created_at
Status
employee{
fullname
department
position
}
}
}
这是工作
似乎strapi无法过滤存在
解决方案
在第一个实例中,您将 argspresences
作为员工的字段传递给,因此任何过滤都将在子解析器级别(而不是顶级查询)处理。您应该确认您正在适当地处理子解析器及其传递的参数。
相比之下,在第二个示例中,您正在作为顶级 Query 访问存在 - 换句话说,一个图形入口点,我预计您将在其中正确处理过滤条件。
FWIW,使用 knex,我已经成功地使用以下模式管理连接,类似于某处文档中概述的内容:
const trxProvider = knex.transactionProvider();
firstTrx = await trxProvider();
// Use firstTrx
// **Some other logic***
secondTrx = await trxProvider();
// Use secondTrx
// **Some other logic***
thirdTrx = await trxProvider();
// Use thirdTrx then commit
thirdTrx.commit();
您可以随意方便地创建这些事务引用,它们都将引用相同的 trx(即使标有不同的名称)。如果您将 trx 传递给回调,这将特别有用,但您希望最终提交,例如,从最初的调用函数。遵循这种模式对我们的连接问题有很大帮助。
最后,如果其他方法都不起作用,您可以尝试修改连接管理器配置(请参阅下面的池):
{
client: 'pg',
connection: {
host:
port:
user:
database:
password:
},
pool: { min: 2, max: 20 },
asyncStackTraces: true
};
}
推荐阅读
- php - 在 WooCommerce 中为越南国家/地区设置状态结帐字段
- python-2.7 - pytorch backports.functools_lru_cache 冲突
- docker - 在 .dockerignore 文件中包含 pkg
- for-loop - 如何在双循环中扫描整数。c语言
- python-3.x - PyCharm IDE 不会突出显示未声明的变量
- git - Git 没有将存储库推送到 github
- ios - iOS curl -X POST 快速集成
- php - 显示 json 数据以查看为字符串或数组
- php - 如何使用 ACF / Wordpress 动态更改我的 PHP 函数名称
- java - 数组中的java元素异或