Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Typeorm/Typescript中添加请求超时?_Typescript_Postgresql_Typeorm - Fatal编程技术网

如何在Typeorm/Typescript中添加请求超时?

如何在Typeorm/Typescript中添加请求超时?,typescript,postgresql,typeorm,Typescript,Postgresql,Typeorm,今天,Typeorm(Postgres)的行为 getManager().query(…)和 getRepositoty().createQueryBuilder(…).getMany() 就是无限期地等待回应 有没有办法引入我可能错过的请求超时 如果不可能,Typeorm是否会从其池中公开连接,以便我可以实现超时机制并手动关闭DB连接?您可以使用maxQueryExecutionTime连接选项 maxQueryExecutionTime-如果查询执行时间超过此给定的最大执行时间(以毫秒为

今天,Typeorm(Postgres)的行为

  • getManager().query(…)
  • getRepositoty().createQueryBuilder(…).getMany()
就是无限期地等待回应

有没有办法引入我可能错过的请求超时

如果不可能,Typeorm是否会从其池中公开连接,以便我可以实现超时机制并手动关闭DB连接?

您可以使用
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
成员,您可以类似地使用它。据我所知,它的管理是一样的,应该工作得很好。