SCRAM-SERVER-FIRST-MESSAGE:客户端密码必须是字符串

新手上路,请多包涵

我阅读了有关此问题的多个页面的文档,但我无法解决此特定错误的问题。

     throw new Error('SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string')
    ^

Error: SASL: SCRAM-SERVER-FIRST-MESSAGE: client password must be a string
    at Object.continueSession (C:\Users\CNFis\Desktop\WulfDevelopments\ThePantry\node_modules\pg\lib\sasl.js:24:11)
    at Client._handleAuthSASLContinue (C:\Users\CNFis\Desktop\WulfDevelopments\ThePantry\node_modules\pg\lib\client.js:257:10)
    at Connection.emit (events.js:400:28)
    at C:\Users\CNFis\Desktop\WulfDevelopments\ThePantry\node_modules\pg\lib\connection.js:114:12
    at Parser.parse (C:\Users\CNFis\Desktop\WulfDevelopments\ThePantry\node_modules\pg-protocol\dist\parser.js:40:17)
    at Socket.<anonymous> (C:\Users\CNFis\Desktop\WulfDevelopments\ThePantry\node_modules\pg-protocol\dist\index.js:11:42)
    at Socket.emit (events.js:400:28)
    at addChunk (internal/streams/readable.js:290:12)
    at readableAddChunk (internal/streams/readable.js:265:9)
    at Socket.Readable.push (internal/streams/readable.js:204:10)

它好像在我的 connectDB() 函数中无法识别数据库密码。我正在尝试运行一个 seeder.js 脚本来为数据库播种用于测试目的的有用信息,如果我运行 npm run server 这是一个刚刚启动 nodemon 服务器的脚本,它将连接到数据库就好了。但是当我尝试运行我的脚本来播种数据时,我返回了这个错误。

 import { Sequelize } from "sequelize";
import colors from "colors";
import dotenv from "dotenv";

dotenv.config();

const user = "postgres";
const host = "localhost";
const database = "thePantry";
const port = "5432";

const connectDB = async () => {
  const sequelize = new Sequelize(database, user, process.env.DBPASS, {
    host,
    port,
    dialect: "postgres",
    logging: false,
  });
  try {
    await sequelize.authenticate();
    console.log("Connection has been established successfully.".bgGreen.black);
  } catch (error) {
    console.error("Unable to connect to the database:".bgRed.black, error);
  }
};

export default connectDB;

上面是我的 connectDB() 文件,同样,当我正常运行服务器时它可以工作。但我仅在尝试为数据库播种时收到此错误。我将在下面发布我的播种器脚本:

 import dotenv from "dotenv";
import colors from "colors";
import users from "./data/users.js";

import User from "./models/userModel.js";

import connectDB from "./config/db.js";

dotenv.config();
console.log(process.env.DBPASS);

connectDB();

const importData = async () => {
  try {
    await User.drop();
    await User.sync();

    await User.bulkCreate(users);

    console.log("Data Imported".green.inverse);
    process.exit();
  } catch (e) {
    console.error(`${e}`.red.inverse);
    process.exit(1);
  }
};

const destroyData = async () => {
  try {
    await User.bulkDestroy();

    console.log("Data Destroyed".red.inverse);
    process.exit();
  } catch (e) {
    console.error(`${e}`.red.inverse);
    process.exit(1);
  }
};

if (process.argv[2] === "-d") {
  destroyData();
} else {
  importData();
}

原文由 Austin Howard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

所以,我可能已经通过在另一个带有 sequelize 的项目中尝试解决了这个问题,事实证明,我的 server.js 文件中与数据库的初始连接,老实说没有任何意义。不像 Mongoose 连接在整个应用程序中可用。它与 Sequelize 它创建的这种连接仅在某些地方很明显,例如我在我的其他项目中尝试与我在这里相同的过程,除了我试图从我的DB 使用我用 model 构建的 sequelize 并且我收到相同类型的错误,我进入我定义模型的地方并制作了 sequelize connectionbf39- ,然后我能够使用该对象模型从数据库中读取。

长话短说,要修复此应用程序中的错误,我必须在 seeder.js 文件中放置一个到数据库的连接,或者我必须在 User 模型中放置一个连接(这是理想,因为我会在不同的地方使用该模型)能够播种信息或从数据库中读取信息。

原文由 Austin Howard 发布,翻译遵循 CC BY-SA 4.0 许可协议

在您的项目中添加您的 .env 文件,我认为您的项目文件夹中缺少您的 .env 文件。像这样添加: 在此处输入图像描述

原文由 Khadim H. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题