尝试使用 Express 和连接池将数据插入 MySQL 数据库时出现访问被拒绝错误

问题描述 投票:0回答:1

我在尝试使用 Express 和连接池将新数据插入 MySQL 数据库时遇到问题。每次我单击网站上的提交按钮时,我都会收到以下错误消息:

Error: Access denied for user ''@'localhost' (using password: NO)

这是我的 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 用户拥有所有必要的权限。尽管进行了这些检查,访问被拒绝错误仍然存在。

有人可以帮助我理解为什么我会遇到这个问题并提出潜在的解决方案吗?我很感激任何见解或指导。

node.js express database-connection mysql2
1个回答
0
投票

如果使用 ES Module

import
语法而不是 CommonJS
require()
函数,您需要了解从模块导出的内容以及作者希望您如何使用该模块。

更改此:

import dotenv from "dotenv";

对此:

import 'dotenv/config'
© www.soinside.com 2019 - 2024. All rights reserved.