"Access denied for user localhost (using password: NO)" 当我使用 .env 文件中的变量时

"Access denied for user localhost (using password: NO)" when I use variables from .env file

我对这个失去了理智。我有我的 app.js,它创建了到 mysql 的连接。它像这样工作得很好:

app.js

const path = require('path')
const hbs = require('hbs')
const express = require('express')
const mysql = require('mysql')

const app = express()
const port = process.env.PORT || 3000

const db = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "password",
    database: "test"
});

db.connect((error) => {
    if(error) throw error
    console.log("MYSQL Connected")
})

但它不适用于此:

app.js

const path = require('path')
const hbs = require('hbs')
const express = require('express')
const dotenv = require('dotenv')
const mysql = require('mysql')

dotenv.config({ path: './.env' })

const app = express()
const port = process.env.PORT || 3000

const db = mysql.createConnection({
    host: process.env.HOST,
    user: process.env.USER,
    password: process.env.PASSWORD,
    database: process.env.DATABASE
});

db.connect((error) => {
    if(error) throw error
    console.log("MYSQL Connected")
})

.env

DATABASE = test
HOST = localhost
USER = root
PASSWORD = password

它识别我存储在我的 .env 文件中的值,因为我的 IDE 在我输入它们时向我显示这些值,只要在 [=36= 中输入用户和密码的值](但不是主机和数据库),它有效。

我是 MySQL 的新手,以前从未使用过它,我正在使用 Windows。所以如果我需要做一些命令行,你能指定我应该在哪个终端输入它们吗?

有人可以帮助我吗?

谢谢!

找到答案。

出于某种原因,这条路径:

dotenv.config({ path: './.env' })

没用。我不得不这样做:

const path = require('path')
const dotenv = require('dotenv')

dotenv.config({ path: path.join(__dirname, './.env') })

我通过对变量(process.env.HOST 等)使用 console.log() 找到了这个解决方案。它们是未定义的。

结论:总是console.log()你的东西。