如何解决了解 Node 中 Postgres 数据库的连接池和身份验证
首先,我对从 Node 查询 Postgres 数据库的概念比较陌生,因为我们的主要数据库是 NoSQL。然而,我们的分析数据库是一个 Postgres 数据库,我们现在将从我们的后端(由亚马逊的 RDS 服务托管)调用它。
对于 Postgres 连接,我使用 node-postgres
(npm),对于身份验证令牌的创建,我使用 Amazon 自己的 SDK。
所以我要做的是:在我们需要查询 Postgres 数据库的后端的第一个请求上,我创建了一个连接池。作为 config
对象初始化中 Pool
对象中的密码,我使用由 AWS.RDS.Signer
对象 (signer.getAuthToken()
) 生成的身份验证令牌。这可以正常工作约 20 分钟(猜测身份验证令牌的生命周期?),但会为后续后端请求引发错误(用户
我认为 Postgres 连接池的全部意义在于避免在需要建立新连接时重新进行身份验证 - 而是使用连接池中的一个连接。如果这不是连接池的重点,那是什么?抱歉问了一个可能很愚蠢的问题,但我无法真正理解这个概念。
编辑:所以这基本上是我实现它的方式:
let pool
const connectToDb = async () => {
const signer = new AWS.RDS.Signer({ ...signerConfig })
const authToken = await signer.getAuthToken()
pool = new Pool({ ...poolConfig,password: authToken })
return pool
}
const queryWithPoolClient = async (queryString) => {
const connectionPool = pool || await connectToDb()
const client = connectionPool.connect() // crashes HERE!
try {
const res = client.query(queryString)
} catch (e) {
console.log(e)
} finally {
client.release()
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。