Node.js+Sequelize连接PostgreSQL出现连接拒绝错误求助
解决Sequelize连接PostgreSQL的ECONNREFUSED错误
首先明确:你必须在本地(或可访问的服务器)安装并运行PostgreSQL服务,你的配置指向localhost:5432,如果本地没有PostgreSQL服务,必然会出现连接拒绝错误,这是问题的核心原因。下面是具体排查和解决步骤:
1. 确认PostgreSQL是否安装并运行
- Linux:执行
ps aux | grep postgres,查看是否有postgres相关进程; - Windows:打开系统服务列表,查找PostgreSQL服务是否处于启动状态;
- macOS:如果用Homebrew安装,执行
brew services list查看状态,或者在系统偏好设置里检查PostgreSQL是否启动。
如果未安装,先根据你的操作系统安装PostgreSQL,安装完成后务必启动服务。
2. 验证5432端口是否被监听
PostgreSQL默认监听5432端口,执行以下命令检查端口状态:
- Linux/macOS:
lsof -i :5432或netstat -tulpn | grep 5432; - Windows:
netstat -ano | findstr :5432。
如果端口未被监听,说明PostgreSQL未启动,或者安装时修改了默认端口(需要同步修改你的db.config.js中的端口配置)。
3. 核对数据库配置准确性
你的db.config.js配置需要确认以下几点:
module.exports = { HOST: 'localhost', USER: 'postgres', PASSWORD: '123', DB: 'capital-greek', dialect: 'postgres', pool: { max: 5, min: 0, acquire: 30000, idle: 10000, }, };
USER:PostgreSQL默认超级用户是postgres,如果安装时修改过用户名,需同步更新;PASSWORD:确认安装PostgreSQL时设置的密码是否为123(密码错误会报认证失败,而非连接拒绝,但也需要核对);DB:capital-greek数据库需要手动提前创建——Sequelize的sync()方法只能创建表,无法自动创建数据库。你可以打开PostgreSQL命令行(psql),执行CREATE DATABASE "capital-greek";(注意用双引号包裹数据库名,PostgreSQL默认区分大小写)。
4. 检查PostgreSQL的连接权限配置
打开PostgreSQL的pg_hba.conf配置文件(不同系统路径不同:Linux一般在/var/lib/postgresql/<版本>/main/,Windows在C:\Program Files\PostgreSQL\<版本>\data\,macOS在/usr/local/var/postgres/),确保存在允许本地连接的规则,比如:
host all all 127.0.0.1/32 scram-sha-256
修改后重启PostgreSQL服务生效。
5. 用基础连接测试排除Sequelize问题
创建一个简单的测试文件test-db.js,直接用pg包测试连接,排除Sequelize的配置问题:
const { Client } = require('pg'); const client = new Client({ host: 'localhost', port: 5432, user: 'postgres', password: '123', database: 'capital-greek' }); client.connect() .then(() => console.log('连接成功!')) .catch(err => console.error('连接失败:', err)) .finally(() => client.end());
执行 node test-db.js,如果能成功连接,说明问题出在Sequelize的配置或代码中;如果还是失败,继续聚焦数据库本身的配置问题。
内容的提问来源于stack exchange,提问作者Eugene
相关产品推荐
相关产品推荐

