今天用node 連接數(shù)據(jù)庫的時(shí)候,一直報(bào)這個(gè)錯(cuò)
Error: ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)
網(wǎng)上找了很多資料,有的說是 mysql 版本錯(cuò),還有的說是 沒有安裝mysql,
于是我試著驗(yàn)證一下是不是真的 mysql 版本錯(cuò)誤,
貼上我的代碼
// 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下運(yùn)行才 報(bào)錯(cuò)的,于是我在重新在windows下運(yùn)行,發(fā)現(xiàn) 可以跑的呀??戳讼聎indows的package.json mysql版本號(hào)是一樣的! 這就尷尬了,不是版本問題, 怎么會(huì)出現(xiàn)拒絕訪問的問題呢....
考慮了一下,有個(gè)想法 先試著一步一步debug一下,首先我們要判斷是否連接到數(shù)據(jù)庫, 于是就在控制臺(tái)輸出
let pool = mysql.createPool(sqlOption)
console.log('pool', pool)
發(fā)現(xiàn)

證明配置出現(xiàn)問題!
那問題可能出現(xiàn)在 db.js 里面的 const sqlOption = require('../config')
看到 sqlOption 就煥然大悟! 媽耶 config.js 暴露的是一個(gè)對(duì)象,里面的db方法才是我們要的配置, let pool = mysql.createPool(sqlOption) 就這么直接放進(jìn)去,不錯(cuò)才怪!
// db.js 改為
const mysql = require('mysql')
const sqlOption = require('../config').db
let pool = mysql.createPool(sqlOption)
再次運(yùn)行,就可以了...
哎 拒絕做馬大哈,健康我和TA!