求助:Node.js在VS Code中连接PostgreSQL数据库失败
Node.js连接PostgreSQL出现EACCES ::1:5432错误的解决办法
近期尝试在VS Code中通过Node.js连接PostgreSQL数据库时,遇到以下错误,已尝试谷歌上多种方法未解决:
Server is running at http://localhost:3000 node:internal/process/promises:288 triggerUncaughtException(err, true /* fromPromise */); ^ Error: connect EACCES ::1:5432 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16) { errno: -4092, code: 'EACCES', syscall: 'connect', address: '::1', port: 5432 } Node.js v18.17.1
以下是针对性的排查和解决步骤:
检查PostgreSQL的IPv6监听配置
打开PostgreSQL的postgresql.conf配置文件,找到listen_addresses项,确保值包含::1或者*(允许所有IP地址),示例:listen_addresses = 'localhost,::1'修改后重启PostgreSQL服务生效。
切换为IPv4地址连接
错误显示程序尝试通过IPv6地址::1连接,可直接将连接字符串中的localhost替换为IPv4本地地址127.0.0.1,示例代码:const { Client } = require('pg'); const client = new Client({ host: '127.0.0.1', port: 5432, user: '你的数据库用户名', password: '你的数据库密码', database: '目标数据库名' });验证端口权限与进程状态
用命令检查5432端口是否被PostgreSQL占用:lsof -i :5432如果无结果,先启动PostgreSQL服务;如果有结果,确认进程所属用户是否具备绑定该端口的权限。
排查防火墙/安全软件限制
暂时关闭本地防火墙或安全软件,测试是否能正常连接。若恢复正常,需添加规则允许Node.js程序访问5432端口。确认PostgreSQL用户访问权限
检查pg_hba.conf配置文件,确保存在允许本地IPv6地址访问的规则,示例:host 目标数据库名 数据库用户名 ::1/128 scram-sha-256同时确保该用户拥有目标数据库的访问权限,可通过SQL语句授权:
GRANT ALL PRIVILEGES ON DATABASE 目标数据库名 TO 数据库用户名;修改配置后重启PostgreSQL服务。
内容的提问来源于stack exchange,提问作者Mark Li
相关产品推荐
相关产品推荐

