egg.js鏈接mysql數據庫遇到的問題

最近在策劃寫一個博客採用先後端分離模式,前端使用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()把對象轉爲對象字符串就能夠了!框架

目前就這麼多,若是道友你遇到啥奇葩的問題,在下方評論,咱們共同摸索而後補到後續,讓更多的人更快的開發!

相關文章
相關標籤/搜索