【发布时间】:2019-01-20 02:38:46
【问题描述】:
场景 1:postgres 服务未运行。节点启动。休息呼叫超时 => 没有问题
场景 2:postgres 服务未运行。节点启动。 postgres 服务启动。休息调用工作 => 没有问题
场景 3:postgres 服务未运行。节点启动。 postgres 服务启动。休息电话工作。 postgres 服务停止 => 节点崩溃。
发生这种情况时的堆栈跟踪如下:
错误:由于管理员命令而终止连接 在 Connection.parseE (...\express.js\node_modules\pg\lib\connection.js:553:11) 在 Connection.parseMessage (...\express.js\node_modules\pg\lib\connection.js:378:19) 在套接字。 (...\express.js\node_modules\pg\lib\connection.js:119:22) 在 emitOne (events.js:116:13) 在 Socket.emit (events.js:211:7) 在 addChunk (_stream_readable.js:263:12) 在 readableAddChunk (_stream_readable.js:250:11) 在 Socket.Readable.push (_stream_readable.js:208:10) 在 TCP.onread (net.js:594:20)
我正在使用具有以下配置的 Postgres 池:
const pool = new Pool({
user: 'postgres',
host: 'localhost',
database: 'sampleDB',
password: 'password',
port: 5432,
max: 1,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
})
我该如何处理这种情况,这样节点才不会崩溃,并且可以返回到 Scenario-1,然后再转到 Scenario-2?
【问题讨论】:
-
捕捉错误。相应的 SQLSTATE 是
57014、57P01和57P02。 -
@LaurenzAlbe 谢谢。我有几个与此相关的问题。 1:你是怎么得到代码的? 2:这是生产环境中可接受的方法吗?
-
java.sql.SQLException有一个getSQLState()方法。这是区分不同错误的最佳方法。解析消息文本是个坏主意。
标签: javascript node.js windows postgresql express