You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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服务

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进程
  • 尝试将代码中的host改为127.0.0.1而非localhost,避免localhost解析到IPv6地址(若PostgreSQL未监听IPv6)

内容的提问来源于stack exchange,提问作者Djahid Hnf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:03:15