Electron中使用Node.js的pg库连接PostgreSQL无响应如何解决
问题排查&修复方案
- 连接配置逻辑错误
pg的Client构造函数只会在实例化时读取传入的配置,你后续直接给client.user、client.password赋值不会生效。你传入的connectionString中未携带用户名、密码信息,导致数据库连接鉴权失败,且你没有监听连接错误事件,所以没有任何报错输出。
正确的配置方式二选一:
- 直接把账密拼入连接字符串:
const connectionString = 'postgres://postgres:root@localhost:5432/postgres' - 不使用连接字符串,改为传入完整配置对象:
const connectionData = { host: 'localhost', port: 5432, database: 'postgres', user: 'postgres', password: 'root' }
- 连接配置逻辑错误
- 未等待连接建立就执行查询
client.connect()是异步方法,你没有等待连接完成就直接发起查询,若查询请求在TCP连接建立前发出,会出现无响应的情况,同时需要给连接过程添加错误处理逻辑捕获异常。
- 未等待连接建立就执行查询
- SQL语句存在关键字冲突
text是PostgreSQL的内置关键字,作为表名使用时需要用双引号包裹,否则会出现SQL语法错误。
- SQL语句存在关键字冲突
修正后可运行代码
const { Client } = require('pg'); // 直接在连接字符串中带入账密 const connectionString = 'postgres://postgres:root@localhost:5432/postgres'; const client = new Client(connectionString); // 监听全局客户端错误,避免异常无输出 client.on('error', err => { console.error('客户端连接错误:', err); }); client.connect(err => { if (err) { console.error('连接失败:', err); return; } // 连接成功后再执行查询,表名用双引号包裹避免关键字冲突 const q = `SELECT * FROM public."text"`; client.query(q, (err, res) => { if (err) { console.log('查询错误:', err); return client.end(); } for (let row of res.rows) { console.log(row); } client.end(); }); });
内容的提问来源于stack exchange,提问作者Sahil Patel
相关产品推荐
相关产品推荐

