如何在Typeorm/Typescript中添加请求超时?
今天,Typeorm(Postgres)的行为如何在Typeorm/Typescript中添加请求超时?,typescript,postgresql,typeorm,Typescript,Postgresql,Typeorm,今天,Typeorm(Postgres)的行为 getManager().query(…)和 getRepositoty().createQueryBuilder(…).getMany() 就是无限期地等待回应 有没有办法引入我可能错过的请求超时 如果不可能,Typeorm是否会从其池中公开连接,以便我可以实现超时机制并手动关闭DB连接?您可以使用maxQueryExecutionTime连接选项 maxQueryExecutionTime-如果查询执行时间超过此给定的最大执行时间(以毫秒为
和getManager().query(…)
getRepositoty().createQueryBuilder(…).getMany()
maxQueryExecutionTime
连接选项
maxQueryExecutionTime
-如果查询执行时间超过此给定的最大执行时间(以毫秒为单位),则记录器将记录此查询
ConnectionOptions是一种连接配置,您可以将其传递到
createConnection
或在或mconfig
中定义,以使用池中的特定连接使用createQueryRunner
文档中没有关于它的信息,但它记录在中
创建用于在单个数据库连接上执行查询的查询运行程序。
使用查询运行程序,您可以使用单个数据库连接和
手动控制数据库事务
用法示例:
const foo = <T>(callback: <T>(em: EntityManager) => Promise<T>): Promise<T> => {
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
return new Promise(async (resolve, reject) => {
let res: T;
try {
await queryRunner.connect();
// add logic for timeout
res = await callback(queryRunner.manager);
} catch (err) {
reject(err);
} finally {
await queryRunner.release();
resolve(res);
}
});
};
constfoo=(回调:(em:EntityManager)=>Promise):Promise=>{
const connection=getConnection();
const queryRunner=connection.createQueryRunner();
返回新承诺(异步(解析、拒绝)=>{
让res:T;
试一试{
等待queryRunner.connect();
//添加超时逻辑
res=等待回调(queryRunner.manager);
}捕捉(错误){
拒绝(错误);
}最后{
等待queryRunner.release();
决议(res);
}
});
};
来自文档:connectTimeoutMS-初始连接到postgres服务器期间发生超时之前的毫秒数。这不是问题所在。问题是关于请求超时而不是连接超时。你能重新检查我的答案吗?下次再阅读(并尝试)maxQueryExecutionTime并不能满足我的实际需要。它不会超时,只会在响应时间超过maxQueryExecutionTime时记录。谢谢,这很聪明。这也适用于存储库吗?Repository
界面有一个queryRunner
成员,您可以类似地使用它。据我所知,它的管理是一样的,应该工作得很好。