美文网首页
node mysql Access denied for use

node mysql Access denied for use

作者: Amfishers | 来源:发表于2018-11-09 11:01 被阅读89次

    今天用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 use

          本文链接:https://www.haomeiwen.com/subject/qxpnxqtx.html