今天用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!
网友评论