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

Aus*_*ard 20 javascript node.js express sequelize.js

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

    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)
Run Code Online (Sandbox Code Playgroud)

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

    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)
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

小智 14

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

  • 但事实并非如此,文件夹结构中并未缺少 .env。这个答案并不能解决问题。 (9认同)
  • 事实并非如此,正如我在 11 月份的帖子中所说,该连接在应用程序的其他区域不可用, (4认同)

Aus*_*ard 4

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

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