Node.js(v20.15.0)连接本地PostgreSQL(v16.3)报ECONNREFUSED错误求助
解决Node.js连接PostgreSQL时的ECONNREFUSED错误
针对你遇到的Error: connect ECONNREFUSED 127.0.0.1:5432错误,结合psql/PgAdmin能正常连接的情况,可从以下几个方向排查:
1. 检查PostgreSQL的监听地址配置
PostgreSQL默认可能仅监听Unix套接字(本地psql/PgAdmin连接会优先用套接字,所以能成功),但Node.js的pg库默认用TCP连接。需要确保PostgreSQL监听127.0.0.1:
- 找到PostgreSQL配置文件
postgresql.conf(Linux路径通常为/var/lib/postgresql/16/main/postgresql.conf,Windows路径为C:\Program Files\PostgreSQL\16\data\postgresql.conf) - 修改
listen_addresses参数为:listen_addresses = '127.0.0.1' # 或用'*'允许所有IP访问 - 重启PostgreSQL服务:
- Linux:
sudo systemctl restart postgresql - Windows:在服务管理器中重启PostgreSQL服务
- Linux:
2. 修复Node.js代码的异步逻辑错误
你的代码存在异步时序问题:db.connect()、db.query()都是异步操作,但你立刻调用了db.end(),导致连接还没建立就被关闭,进而触发连接失败。修正后的代码如下:
使用async/await(推荐)
import pg from 'pg'; const db = new pg.Client({ user: "postgres", host: "localhost", database: "world", password: "123456", port: 5432 }); async function fetchData() { try { await db.connect(); // 等待连接建立 const res = await db.query("SELECT * FROM capitals"); const quiz = res.rows; console.log(quiz); } catch (err) { console.log("error executing query", err.stack); } finally { await db.end(); // 确保查询完成后关闭连接 } } fetchData();
使用回调函数
import pg from 'pg'; const db = new pg.Client({ user: "postgres", host: "localhost", database: "world", password: "123456", port: 5432 }); db.connect((connectErr) => { if (connectErr) { console.log("connection error", connectErr.stack); return; } db.query("SELECT * FROM capitals", (queryErr, res) => { if (queryErr) { console.log("error executing query", queryErr.stack); } else { const quiz = res.rows; console.log(quiz); } db.end(); // 查询完成后关闭连接 }); });
3. 验证端口监听与连接地址
- 检查5432端口是否被PostgreSQL监听:
- Linux/macOS:
ss -tulpn | grep 5432,输出应包含postgres进程 - Windows:
netstat -ano | findstr :5432,确认PID对应PostgreSQL进程
- Linux/macOS:
- 尝试将代码中的
host改为127.0.0.1而非localhost,避免localhost解析到IPv6地址(若PostgreSQL未监听IPv6)
内容的提问来源于stack exchange,提问作者Djahid Hnf
相关产品推荐
相关产品推荐

