Node/Express API连接本地PostgreSQL被拒绝问题排查
问题:WSL环境下Sequelize连接PostgreSQL遭拒绝,求排查思路
我在为API搭建Sequelize基础框架时,遇到数据库连接拒绝的问题。当前使用WSL环境,已通过PGAdmin完成PostgreSQL服务器部署。假设账号凭证无问题,请问我是否遗漏了配置环节?
相关代码如下:
const app = require("./app"); const http = require("http"); const server = http.createServer(app); const { Sequelize } = require("sequelize"); const sequelize = new Sequelize('postgres://fakeuser:fakepass@localhost:5432/kobold_condominium') // Example for postgres server.listen(3000); server.on("listening", async () => { console.log("Server is listening for requests on port 3000."); try { await sequelize.authenticate(); console.log("Database connection successful."); } catch (error) { console.log("Database connection:" + error); } });
控制台持续输出错误:
Database connection:SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:5432
原本以为不会存在Windows/WSL兼容性问题,求排查思路。
排查思路及解决方案
1. 调整PostgreSQL监听地址
Windows上的PostgreSQL默认仅监听127.0.0.1,仅允许Windows本地进程访问,WSL作为独立虚拟环境无法通过localhost直接连接。
- 找到PostgreSQL配置文件
postgresql.conf(通常路径为C:\Program Files\PostgreSQL\<版本号>\data) - 修改
listen_addresses配置项为'*',或指定你的Windows主机实际IP(如192.168.x.x) - 重启Windows服务列表中的
postgresql-x64-<版本号>服务
2. 更新PostgreSQL连接权限规则
修改pg_hba.conf(同postgresql.conf所在目录),允许WSL子网的连接请求:
- 添加一行规则,适配WSL的IP段(通常为
172.16.0.0/12):
测试阶段可临时用更宽松的规则(不建议生产环境使用):host all all 172.16.0.0/12 scram-sha-256host all all 0.0.0.0/0 scram-sha-256 - 重启PostgreSQL服务生效
3. 修改Sequelize连接地址
将连接串中的localhost替换为Windows主机的实际IP(可在Windows命令行执行ipconfig,查看本地网络适配器的IPv4地址):
// 示例:替换为你的Windows主机IP const sequelize = new Sequelize('postgres://fakeuser:fakepass@192.168.1.105:5432/kobold_condominium')
4. 检查Windows防火墙规则
Windows防火墙可能拦截了WSL对5432端口的访问:
- 打开「Windows Defender防火墙」→「高级设置」→「入站规则」
- 新建规则:允许TCP协议的5432端口,允许WSL子网或所有网络连接
5. 基础连接验证
在WSL终端用psql直接测试连接,确认数据库配置本身无问题:
psql -h <Windows主机IP> -U fakeuser -d kobold_condominium
如果能成功连接,说明问题出在Sequelize代码或依赖配置;如果仍失败,回到前面的步骤重新排查。
内容的提问来源于stack exchange,提问作者rainydaymatt
相关产品推荐
相关产品推荐

