最近在策劃寫一個博客採用先後端分離模式,前端使用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裏面加入如下代碼vue
exports.mysql = { enable: true, package: 'egg-mysql', };
其次就是鏈接mysql數據庫了,鏈接數據庫的基礎要點就是你電腦上安裝了mysql數據庫哇,不要說數據庫都沒安裝你就去鏈接,或者你有線上的數據庫鏈接也是能夠的.egg-mysql插件官方文檔這樣寫的(咱們由於是博客因此用的是單數據源),單數據源配置以下: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裏面sql
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','');
官方文檔這樣的npm
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安裝的時候有個叫強密碼模式致使這種錯誤的數據結構
點到下面按鈕選擇Use Legacy Password Encryption,或者在安裝的時候選擇這個選項app
2.查詢數據庫返回結果會出現RowDataPacket致使這樣的數據結構取不到數據, 相似如下
[ RowDataPacket { user_name: 'wzj', password: '123456' }, RowDataPacket { user_name: 'hyn', password: '123456' } ]
咱們該如何處理如下的狀況呢,其實很簡單JSON.stringify()把對象轉爲對象字符串就能夠了!框架
目前就這麼多,若是道友你遇到啥奇葩的問題,在下方評論,咱們共同摸索而後補到後續,讓更多的人更快的開發!