我阅读了有关此问题的多个页面的文档,但我无法解决此特定错误的问题。
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 许可协议
所以,我可能已经通过在另一个带有 sequelize 的项目中尝试解决了这个问题,事实证明,我的
server.js
文件中与数据库的初始连接,老实说没有任何意义。不像Mongoose
连接在整个应用程序中可用。它与Sequelize
它创建的这种连接仅在某些地方很明显,例如我在我的其他项目中尝试与我在这里相同的过程,除了我试图从我的DB 使用我用model
构建的sequelize
并且我收到相同类型的错误,我进入我定义模型的地方并制作了sequelize
connectionbf39- ,然后我能够使用该对象模型从数据库中读取。长话短说,要修复此应用程序中的错误,我必须在
seeder.js
文件中放置一个到数据库的连接,或者我必须在User
模型中放置一个连接(这是理想,因为我会在不同的地方使用该模型)能够播种信息或从数据库中读取信息。