You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测试时出现SASL认证错误:client password must be a string求助

解决SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string错误

问题根源

这个错误的核心是PostgreSQL客户端连接时,传入的密码不是字符串类型(大概率是undefined)。原因是测试环境下没有正确加载.env.test文件里的数据库配置,导致pg的Pool初始化时读取不到PGPASSWORD的值。

解决方案

1. 确保dotenv已安装并正确加载测试环境变量

首先确认项目里安装了dotenv:

npm install dotenv --save-dev

然后在测试的前置文件(比如你的helper.js)最顶部添加加载.env.test的代码,必须在引入db之前执行:

// helper.js
require('dotenv').config({ path: './.env.test' }); // 先加载测试环境变量
const db = require("../src/db");

afterEach(async () => {
  await db.query("TRUNCATE Artists CASCADE");
});

如果你的测试框架(比如Mocha)有全局前置文件,也可以在那里统一加载.env.test,避免每个测试文件重复写。

2. 显式配置Pool连接参数(可选,更稳妥)

修改db/index.js,显式传入数据库配置参数,避免依赖pg自动读取环境变量的隐式行为:

// db/index.js
const { Pool } = require("pg");

const pool = new Pool({
  user: process.env.PGUSER,
  host: process.env.PGHOST,
  password: process.env.PGPASSWORD,
  database: process.env.PGDATABASE,
  port: process.env.PGPORT,
});

module.exports = {
  query: (text, params) => pool.query(text, params),
};

3. 验证测试命令的环境加载

检查package.json里的测试脚本,确保没有覆盖环境变量,比如:

{
  "scripts": {
    "test": "mocha"
  }
}

不需要额外设置,只要测试文件里正确加载了.env.test即可。

为什么之前修改密码没用?

因为你修改的是.env.test里的密码,但测试运行时根本没加载这个文件,pg还是拿不到正确的密码值,所以修改密码不会生效。

内容的提问来源于stack exchange,提问作者mc00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:36:54