Search code examples
mysqlnode.jsdotenv

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


I'm losing my mind on this one. I have my app.js which creates a connection to mysql. It works fine like this :

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")
})

But it doesn't work with this :

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

It recognizes the values I have stored in my .env file since my IDE is showing me the values when I type them in and as long the values of user & password are typed in app.js (but not host and database), it works.

I'm new to MySQL, never used it before, and I'm on Windows. So if I need to do some command lines, can you please specify in which terminal I should type them in ?

Can someone help me ?

Thank you !


Solution

  • Found the answer.

    For some reason, this path :

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

    Didn't work. I had to do it like this :

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

    I found this solution by using console.log() on the variables (process.env.HOST, etc...). They were undefined.

    Conclusion : always console.log() your stuff.