将数据库客户端转换为 pg.Client 或 pg.Pool 的正确方法

问题描述 投票:0回答:1

我正在使用 Lucia auth,它具有用于 Postgres 和 node-postgres 的适配器,但没有专门用于 pg-promise 的适配器。当我尝试实例化 Lucia 的数据库适配器时,它抱怨第一个参数不是“客户端”或“池”。经过多次修改,我能够让它工作,声明如下:

import pgPromise from 'pg-promise';
const pgp = pgPromise({});
export const database = pgp(DATABASE_URL_LOCAL);
const adapter = new NodePostgresAdapter(database.$pool as unknown as pg.Pool, {
    user: 'auth_user',
    session: 'user_session'
});

有问题的部分是:database.$pool 与 pg.Pool 一样未知。这是最好的方法,还是有更干净的方法?

casting pg-promise
1个回答
0
投票

您的使用模式是正确的,除了

Lucia
添加对
pg-promise
的支持之外,没有更好的方法了。

pg-promise
内部,该池具有内部声明的类型IPool,该类型仅声明可以在
pg-promise
内安全使用的属性和方法的子集。因此,当像您一样手动集成时,该接口签名是不够的,这就是为什么您首先将其制作为
any
,然后重新转换为正确的类型。

© www.soinside.com 2019 - 2024. All rights reserved.