node mysql Access denied for user ''@'localhost' (using password: NO)

今天用node 连接数据库的时候,一直报这个错

Error: ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)

网上找了很多资料,有的说是 mysql 版本错,还有的说是 没有安装mysql,
于是我试着验证一下是不是真的 mysql 版本错误,

贴上我的代码

// config.js
module.exports = {
    db: {
        'port': '3306',
        'host': 'localhost',
        'user': 'root',
        'password': '12345678',
        'database': 'my_music'
    }
}


// db.js
const mysql = require('mysql')
const sqlOption = require('../config')

let pool = mysql.createPool(sqlOption)

let db = {}

db.sqlQuery = (sql, params) => {
    
    return new Promise((resolve, reject) => {

        pool.getConnection(function (err, connection) {

            if (err) return reject(err) // not connected!

            // fields为查询的字段,一般比较少用
            connection.query(sql, params, function (error, results, fields) {

                // 如果不查询了,就释放连接,为了性能着想
                connection.release();

                // Handle error after the release.
                if (error) return reject(error)
                
                resolve(results)
                
            })
        })

    })

}

module.exports = db

首先我是在window下写过一次,然后备有备份,所以在macbook重新写了一次。 所以是在macbook下运行才 报错的,于是我在重新在windows下运行,发现 可以跑的呀。看了下windows的package.json mysql版本号是一样的! 这就尴尬了,不是版本问题, 怎么会出现拒绝访问的问题呢....

考虑了一下,有个想法 先试着一步一步debug一下,首先我们要判断是否连接到数据库, 于是就在控制台输出

let pool = mysql.createPool(sqlOption)
console.log('pool', pool)

发现


为什么是undefined呢!

证明配置出现问题!

那问题可能出现在 db.js 里面的 const sqlOption = require('../config')

看到 sqlOption 就焕然大悟! 妈耶 config.js 暴露的是一个对象,里面的db方法才是我们要的配置, let pool = mysql.createPool(sqlOption) 就这么直接放进去,不错才怪!

// db.js 改为
const mysql = require('mysql')
const sqlOption = require('../config').db

let pool = mysql.createPool(sqlOption)

再次运行,就可以了...

哎 拒绝做马大哈,健康我和TA!

你可能感兴趣的:(node mysql Access denied for user ''@'localhost' (using password: NO))