Sequelize连接PostgreSQL失败:错误显示Windows用户名而非指定用户名
解决Sequelize连接PostgreSQL时使用Windows用户名而非指定用户的问题
问题根因
核心问题是Sequelize的配置字段与pg驱动的命名规则不一致:pg/pg-promise使用user作为用户名配置键,但Sequelize要求用username。当你传入user时,Sequelize无法识别该字段,会自动 fallback 到当前系统的用户名(也就是你的Windows用户名),最终导致认证失败。
修复步骤
修正配置字段名
将Sequelize实例配置中的user替换为username,修改后的代码如下://Imports required modules require("dotenv").config(); //Imports required modules const { Sequelize } = require('sequelize'); //Sets up database connection const sequelize = new Sequelize({ dialect: 'postgres', username: process.env.DB_USER, // 替换为Sequelize要求的字段名 host: process.env.DB_HOST, database: process.env.DB_NAME, password: process.env.DB_PASSWORD, port: process.env.DB_PORT, }); const testFunction = async function(){ try { await sequelize.authenticate(); console.log('Connection has been established successfully.'); } catch (error) { console.error(error); } }; testFunction(); module.exports = {sequelize};验证环境变量加载
可以在代码开头添加日志,确认环境变量是否被正确读取:console.log("DB_USER:", process.env.DB_USER); // 检查输出是否为你指定的数据库用户名
补充说明
之前使用pg/pg-promise能成功连接,是因为它们直接调用PostgreSQL Node.js驱动的原生配置(user是驱动的标准字段),而Sequelize对配置做了封装,使用自己的字段命名规范,这是Sequelize新手容易踩的典型坑。
内容的提问来源于stack exchange,提问作者Brenden
相关产品推荐
相关产品推荐

