【发布时间】:2020-09-03 15:54:09
【问题描述】:
我试图让我的前端在我的 postgres 数据库上的某个表发生更改时监视事件。
Postgres 事件完美触发,我可以通过 Socker.io 连接将它们中继到,但我遇到了可靠性问题。我的服务器上出现(node:26) UnhandledPromiseRejectionWarning: Error: Client was closed and is not queryable 错误,并且事件通常不会被 Socket 发出和捕获。我认为这与我连接到 Socket / db 客户端的方式有关。
pg 配置:
const {Pool} = require('pg');
const production = process.env.NODE_ENV === 'production';
const connectionString = `postgresql://${process.env.DB_USER}:${process.env.DB_PASSWORD}@${process.env.DB_HOST}:${process.env.DB_PORT}/${process.env.DB_DATABASE}`
const pool = new Pool({
connectionString: process.env.CONNECTION_STRING ? process.env.CONNECTION_STRING : connectionString,
ssl: production,
connectionTimeoutMillis : 5000,
idleTimeoutMillis : 30000
});
index.js
io.of("/marketDetails").on('connect', (socket) => {
pool.connect((err, client, release) => {
if (err) {
console.log(err);
return;
}
client.query('LISTEN update_table');
client.on('notification', async(data) => {
console.log("notified of table change")
handleDBEvent(socket, data);
})
socket.on("disconnect", () => {
client.query('UNLISTEN update_table');
})
release();
})
});
我收到有关某些表更改的通知,但非常不一致。
【问题讨论】:
标签: javascript node.js websocket socket.io pg