Postgres测试库连接报SASL密码错误,开发库连接正常
解决方案
1. 修复测试脚本的ENV设置命令
package.json里的测试脚本存在命令分隔错误,导致ENV变量值被错误赋值,修改为:
"test": "set ENV=test && db-migrate --env test up && jasmine && db-migrate --env test down"
2. 确保database变量始终有合法配置(可选但推荐)
在database.ts中,避免因ENV值不符合预期导致配置未初始化:
let database = { host: POSTGRES_HOST, user: POSTGRES_USER, password: POSTGRES_PASSWORD, database: POSTGRES_DB } if (ENV === 'dev') { database.database = POSTGRES_DB } else if (ENV === 'test') { database.database = POSTGRES_TEST_DB }
3. 可选:统一测试环境的独立密码配置
如果测试数据库使用单独的密码(.env中的POSTGRES_TEST_PASSWORD),需要同步修改两处配置:
database.ts的test分支:
else if (ENV === 'test') { database = { host: POSTGRES_HOST, database: POSTGRES_TEST_DB, user: POSTGRES_USER, password: process.env.POSTGRES_TEST_PASSWORD! } }
database.json的test配置:
"test": { "driver": "pg", "host": { "ENV": "POSTGRES_HOST" }, "database": { "ENV": "POSTGRES_TEST_DB" }, "user": { "ENV": "POSTGRES_USER" }, "password": { "ENV": "POSTGRES_TEST_PASSWORD" } }
问题原因分析
- ENV变量赋值错误:原测试脚本中
set ENV=test后未用&&分隔后续命令,Windows命令行将ENV的值设为test db-migrate --env test up,而非预期的test。此时database.ts中的ENV === 'test'判断不成立,database变量未被正确初始化,传递给Pool的配置里password为undefined,触发SASL认证错误。 - 测试阶段的连接触发时机:前三个测试仅检查方法是否存在,不需要建立数据库连接,因此不会暴露配置问题;最后一个测试调用
store.create时才尝试连接数据库,错误才显现。
内容的提问来源于stack exchange,提问作者Yusuf Sameh
相关产品推荐
相关产品推荐

