在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用户具有所有必要的权限.尽管进行了这些判断,访问被拒绝错误仍然存在.

有人能帮我理解为什么会遇到这个问题并建议可能的解决方案吗?感谢您的真知灼见或指导.

推荐答案

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

更改这一点:

import dotenv from "dotenv";

对此:

import 'dotenv/config'

注意:.env文件需要位于项目的根目录中.如果它不是,而且你不能/不会移动它,那么你需要做一些类似的事情:

import * as dotenv from 'dotenv';
dotenv.config({ path: "path/to/your/.env" })

Node.js相关问答推荐

根据我的测试,为什么在编写Varint代码方面,NodeJS要比Rust快这么多?

如何在不丢失其他键的情况下解开子文档数组,然后反转该过程?

用于SLACK命令返回json而不是文本的AWS lambda函数

为什么我的 Node.js 应用程序在登录时无法正确验证密码(使用 Passport-local 和 bcryptjs)?

动态设置元数据,无需重复请求 NextJS 13

使用更新版本仍然找到包@angular/fire但不支持原理图

Prisma,只有一个用户的行可以有真值,@@unique(userId, isActive)

在 getServerSideProps 中使用 EmailProvider 获取 NextAuth 会话会抛出 fs找不到模块

错误 node :错误:绑定消息提供 16 个参数,但准备语句需要 15 个

Mongodb 从文档中获取聚合结果中的特定属性

如何调用同名的两个函数?

Mongoose-更新嵌套数组

GridFS 大文件下载使 Node.js 服务器崩溃. MongoServerError:排序超出了字节的内存限制

响应发送 200 而不是 403

baseurl64 缓冲区解码

node.js 中 pdfkit-tables 中的垂直线

您如何写入 aws lambda 实例的文件系统?

在 Node 中连接和缩小 JS 文件

在 Node.js 中获取终端的宽度

npm install packagename --save-dev 不更新 package.json