javascript - 使用 node pg (postgres) 客户端处理错误和恢复
问题描述
我在我的应用程序中使用节点模块 pg,我想确保它可以正确处理连接和查询错误。
我遇到的第一个问题是我想确保它可以在 postgres 不可用时正确恢复。
我发现有一个错误事件,所以我可以检测是否有连接错误。
import pg from 'pg'
let pgClient = null
async function postgresConnect() {
pgClient = new pg.Client(process.env.CONNECTION_STRING)
pgClient.connect()
pgClient.on('error', async (e) => {
console.log('Reconnecting')
await sleep(5000)
await postgresConnect()
})
}
我不喜欢在这里使用全局,我想设置睡眠延迟来做一个小的指数退避。我注意到“重新连接”立即触发两次,然后等待五秒钟,我不确定为什么它第一次触发而没有任何等待。
我还必须确保查询执行。我有类似的东西我正在尝试。
async function getTimestamp() {
try {
const res = await pgClient.query(
'select current_timestamp from current_timestamp;'
)
return res.rows[0].current_timestamp
} catch (error) {
console.log('Retrying Query')
await sleep(1000)
return getTimestamp()
}
}
这似乎可行,但我没有对其进行足够的测试以确保它可以保证查询被执行或继续尝试。我应该寻找特定的错误,只在某些错误上永远循环,而在其他错误上失败。我需要做更多的研究来找出抛出了什么错误。我也需要对这里的延迟进行退避。
这一切“似乎”都有效,我不想让邓宁-克鲁格效应的受害者失败。我需要确保这个过程可以处理各种情况并恢复。
解决方案
推荐阅读
- angular - Ionic 添加了新页面,但显示 No provider for NavParams
- json - AWS CloudFormation 用户数据 \; 和新行(JSON)
- php - Laravel 7 从包含的布局或组件中提取 css / js
- java - Java将许多对象字段值设置为null的最佳方法
- python - 正则表达式:交流发电机订单问题
- python - 如何在 Xampp 上解决 Python 的服务器错误 500
- vue.js - Vue 输入输入值,移动到下一个字段
- java - 如何使用存储在 char 中的符号进行算术运算
- c++ - 在某些情况下需要的假设声明中的名称查找规则是什么
- bitbucket-server - BitBucket 服务器合并提交历史视图