使用.env变量连接MySQL时出现权限拒绝错误的求助
问题:使用.env变量连接MySQL时出现权限拒绝错误
直接写死数据库配置能正常连接,但通过.env变量加载配置时,出现以下权限拒绝错误:
Error: Access denied for user ''@'localhost' (using password: YES) at Packet.asError code: 'ER_ACCESS_DENIED_ERROR', errno: 1045, sqlState: '28000', sqlMessage: "Access denied for user ''@'localhost' (using password: YES)", sql: undefined
相关文件内容
server.js代码
const mysql = require('mysql2') const connection = mysql.createConnection({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE, })
.env文件内容
DB_HOST=127.0.0.1 DB_USER=root DB_PASSWORD=my password DB_DATABASE=my db name
解决步骤
安装并加载dotenv包
Node.js不会自动读取.env文件,需手动加载。先安装依赖:npm install dotenv --save在server.js最顶部添加加载代码:
require('dotenv').config() const mysql = require('mysql2') // 后续连接代码保持不变检查.env文件格式
- 变量名和值之间不能有空格,比如不能写成
DB_USER = root - 密码或数据库名含空格时无需加引号,当前
DB_PASSWORD=my password格式合法 - 确保.env文件放在项目根目录,与server.js同级
- 变量名和值之间不能有空格,比如不能写成
验证环境变量加载情况
在server.js中添加日志,确认变量是否读取成功:require('dotenv').config() console.log('DB_USER:', process.env.DB_USER) // 应输出root console.log('DB_HOST:', process.env.DB_HOST) // 应输出127.0.0.1 const mysql = require('mysql2') // 后续连接代码如果输出为空,需指定.env文件路径:
require('dotenv').config({ path: './.env' }) // 确保路径正确排查VSCode JDBC客户端配置
若在VSCode JDBC客户端中使用.env变量,需确认该客户端是否支持读取.env文件。部分客户端需手动配置变量,或安装插件识别.env。可先手动填写配置参数测试连接,排查是代码问题还是客户端配置问题。
内容的提问来源于stack exchange,提问作者Ruslan Karpetskyu
相关产品推荐
相关产品推荐

