egg.js連線mysql資料庫遇到的坑
阿新 • • 發佈:2018-12-10
最近在策劃寫一個部落格採用前後端分離模式,前端使用vue後端使用egg.js,我也是剛開始學習egg.js,所以會將自己踩的坑都記錄下來.
首先介紹下後端為什麼採用egg.js吧,之前我是學習了koa2的,大部分基礎知識基本都學完了,後來看了下egg.js最終選用了他,其實egg.js也是基於koa開發的,但是egg.js號稱為企業級框架而生,所以我想嘗試下,其實最大的原因不是這個,主要由於egg.js比較規範化奉行約定優於配置的原則,與egg.js媲美的還有一款sails框架!話不多說!
首先需要安裝egg-mysql
$ npm i --save egg-mysql
然後開啟外掛 在config/plugin.js裡面加入以下程式碼
exports.mysql = {
enable: true,
package: 'egg-mysql',
};
其次就是連線mysql資料庫了,連線資料庫的基礎要點就是你電腦上安裝了mysql資料庫哇,不要說資料庫都沒安裝你就去連線,或者你有線上的資料庫連線也是可以的.egg-mysql外掛官方文件這樣寫的(我們因為是部落格所以用的是單資料來源),單資料來源配置如下:
// config/config.${env}.js exports.mysql = { // 單資料庫資訊配置 client: { // host host: 'mysql.com', // 埠號 port: '3306', // 使用者名稱 user: 'test_user', // 密碼 password: 'test_password', // 資料庫名 database: 'blog', }, // 是否載入到 app 上,預設開啟 app: true, // 是否載入到 agent 上,預設關閉 agent: false, };
個人建議直接配置在config.default.js裡面
module.exports = appInfo => {
const config = exports = {};
config.mysql = {
client: {
host: 'localhost',
port: '3306',
user: 'test_user',
password: 'test_password',
database: 'blog'
},
app: true,
agent: false
};
}
然後測試下是否連線成功,在一個service裡面用一段程式碼
const user = await this.app.mysql.query('select * from user_list','');
官方文件這樣的
await app.mysql.query(sql, values);
官網的寫法是在有
const {app}=this;
1.在連線資料庫的時候還遇到一個坑,在以上所有都對的情況下還在控制檯報如下的錯誤
Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
這個主要是mysql安裝的時候有個叫強密碼模式導致這種錯誤的
![圖片描述][1]
點到下面按鈕選擇Use Legacy Password Encryption,或者在安裝的時候選擇這個選項
2.查詢資料庫返回結果會出現RowDataPacket導致這樣的資料結構取不到資料,
類似以下
[ RowDataPacket { user_name: 'wzj', password: '123456' },
RowDataPacket { user_name: 'hyn', password: '123456' } ]
我們該如何處理以下的情況呢,其實很簡單JSON.stringify()把物件轉為物件字串就可以了!
目前就這麼多,如果道友你遇到啥奇葩的問題,在下方評論,我們共同摸索然後補到後續,讓更多的人更快的開發!