在try 使用Express和连接池将新数据插入MySQL数据库时,我遇到了一个问题.每次我在我的网站上单击提交按钮时,我都会收到以下错误消息:
Error: Access denied for user ''@'localhost' (using password: NO)
个
下面是来self 的Node.js应用程序server.js的相关代码片段:
import express from "express";
import cors from "cors";
import dotenv from "dotenv";
import * as mysql from "mysql2";
dotenv.config({ path: "backend/server/.env" });
import { saveNewBirthday } from "./database/saveNewBirthday.js";
const server = express();
const corsOption = {
origin: "http://localhost:3000",
};
const port = 8000;
server.use(cors(corsOption));
server.use(express.json());
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
});
server.post("/new_birthday", (req, res) => {
const requestBody = req.body;
const date = requestBody.date;
const name = requestBody.name;
const memo = requestBody.memo;
const sendEmail = requestBody.sendEmail;
saveNewBirthday(pool, date, name, memo, sendEmail) //
.then((result) => {
console.log(result);
})
.catch((reject) => {
console.log(reject);
});
});
server.listen(port, () => {
console.log("listening on", port);
})
这是来自saveNewBirthday.js的saveNewBirthday函数代码:
export function saveNewBirthday(pool, date, name, memo, sendEmail) {
return new Promise((resolve, reject) => {
pool.getConnection((error, connection) => {
if (!error) {
const query =
"INSERT INTO birthdays (BirthDate, BirthName, BirthMemo, SendEmail) VALUES (?, ?, ?, ?)";
const data = [date, name, memo, sendEmail];
connection.query(query, data, (err) => {
if (!err) {
connection.release();
resolve({
fail: false,
where: "",
errorMessage: "",
});
} else {
reject({
fail: true,
where: "insert",
errorMessage: `${err}`,
});
}
});
} else {
reject({
fail: true,
where: "getConnection",
errorMessage: `${error}`,
});
}
});
});
}
我已经验证了process.env.DB_PASSWORD已正确加载,并且MySQL用户具有所有必要的权限.尽管进行了这些判断,访问被拒绝错误仍然存在.
有人能帮我理解为什么会遇到这个问题并建议可能的解决方案吗?感谢您的真知灼见或指导.