我正在使用mysql2软件包将节点与MySQL连接,并且正在使用.env文件存储用户名和密码。但是,当我在配置中使用它连接MySql时,它不会加载。每当我使用Postman击中端点时,都会引发以下错误。
Error: Access denied for user 'undefined'@'localhost' (using password: YES)
下面是我的代码:
const express = require("express");
const router = express.Router();
const mysql = require("mysql2");
const connection = mysql.createPool({
user: `${process.env.DB_USERNAME}`,
host: "localhost",
password: `${process.env.DB_PASSWORD}`,
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0,
database: "issue",
});
我正在使用dotenv加载env变量,并在我的条目文件中将其初始化为:
require('dotenv').config();
我在做什么错了?
答案 0 :(得分:0)
作为JavaScript强制类型输入方式的副作用,如果process.env.foo
是"undefined"
并在字符串中使用,则会产生undefined
。
您的dotenv配置文件中有错别字,或者您使用dotenv时还有其他问题。
我会建议使用更具防御性的编码,以便在发生这种情况时提供更好的错误消息。 (以下代码未经测试,但是您无疑会明白这一点。)
const express = require("express");
const router = express.Router();
const mysql = require("mysql2");
const dbUsername = process.env.DB_USERNAME;
const dbPassword = process.env.DB_PASSWORD;
if (!dbUsername) {
throw new Error('DB_USERNAME environment variables must be set');
}
if (!dbPassword) {
throw new Error('DB_PASSWORD environment variables must be set');
}
const connection = mysql.createPool({
user: dbUsername,
host: "localhost",
password: dbPassword,
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0,
database: "issue",
});