這是在講關於一名叫 Koa 的全端勇士傳說-MySQL篇-sequelize(1)

前言

接下來將會使用 sequelize 這個套件,sequelize 它是一個 ORM,ORM 可以幫助我們解決一些問題,例如 SQL injection 的問題

ORM

想必一定會有人問 ORM 是什麼鬼東西,在前面有講到 ORM 可以幫助我們解決一些問題,例如 SQL injection 的問題,但是其實不只有這個,他還可以減少我們重複程式碼的使用性,進而達到程式碼的簡潔與美麗

ORM 若要解釋起來說真的非常複雜,因為會與後端牽扯比較重,所以這邊引用 阮一峰 的簡單說法就是

ORM 就是通過實例物件的語法,完成關聯性資料庫的操作與技術,就是物件-關聯鏡像(Object/Relational Mapping)的縮寫

起手式

首先我們先來安裝一下 sequelize

1
npm install --save sequelize

另外這個 ORM 支援多種資料庫的處理,所以必須另外安裝相關的資料庫

1
2
3
4
5
6
# 選擇對應的安裝:
npm install --save pg pg-hstore # Postgres
npm install --save mysql2
npm install --save mariadb
npm install --save sqlite3
npm install --save tedious # Microsoft SQL Server

那我們這個文章的範例是使用 MySQL 所以完整套件安裝指令是這樣子

1
npm install --save sequelize mysql2

那麼有可能有人會說為什麼不挑選這一個 orm

其實在最前面這個 node-orm 作者也是推薦我們使用 sequelize 或是 bookshelf,主要原因就是出在這兩個套件在社群上活耀度比較高,當我們出現問題的時候也會比較容易找到相關的解答,所以挑選社群活耀度較高的套件對於我們在開發上也是有一定幫助

那麼廢話就不多說,先來安裝套件再說

套件安裝

使用方式

那麼由於 sequelize 有版本差異,如果你沒有特別挑選版本的話,應該會安裝到 sequelize V5 版,所以我這邊就會直接依照 V5 版的參考文件去做撰寫

首先先開啟 app.js 引入 sequelize 套件

1
const Sequelize = require('sequelize');

接下來我們要針對資料庫做連接,那麼連接語法如下

基本上連接方式有兩種,另一種是比較簡短的傳輸方式,是使用 URL 的,可是我比較喜歡下面這種

1
2
3
4
const sequelize = new Sequelize('test','root','123456', { // 要連接的資料庫、帳號、密碼
host: 'localhost', // 資料庫 IP
dialect: 'mysql' // 可以選擇 mysql、mariadb、postgres、mssql 其中一個
});

這邊也附上 URL 傳遞方式

1
const sequelize = new Sequelize('mysql://root:123456@localhost:3306/test')

那麼我們該如何確定已經連接上了呢?官方有提供一個方法可以讓我們使用也就是 authenticate()

1
2
3
4
5
6
const Sequelize = require('sequelize');
const sequelize = new Sequelize('test','root','123456', { // 要連接的資料庫、帳號、密碼
host: 'localhost', // 資料庫 IP
dialect: 'mysql' // 可以選擇 mysql、mariadb、postgres、mssql 其中一個
});
sequelize.authenticate();

另外由於這個方法是 Promise 方法,所以可以使用 .then.catch

1
2
3
4
5
6
7
8
9
10
11
12
const Sequelize = require('sequelize');
const sequelize = new Sequelize('test','root','123456', { // 要連接的資料庫、帳號、密碼
host: 'localhost', // 資料庫 IP
dialect: 'mysql' // 可以選擇 mysql、mariadb、postgres、mssql 其中一個
});
sequelize.authenticate()
.then(() => {
console.log('資料庫連接成功');
})
.catch((error) => {
console.error(`資料庫連接錯誤:${error}`);
})

所以這時候我們來執行一下 node app.js 看看會得到什麼訊息

連接成功

那如果資料庫沒有啟用呢?又或者是帳號密碼錯誤呢?

資料庫密碼錯誤

資料庫連接失敗

接下後面會講該如何透過 sequelize 使用來查詢、新增、編輯、刪除資料

補充

通常 sequelize 一旦啟用連接之後就會一直保持連接狀態,但是這種狀況是不好的,如果有 100 個人連接之後也不關閉連接,那麼就有可能導致 SQL 負載,所以 sequelize 也有提供一個方式可以關閉連接,也就是 sequelize.close()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const Sequelize = require('sequelize');
const sequelize = new Sequelize('test','root','123456', { // 要連接的資料庫、帳號、密碼
host: 'localhost', // 資料庫 IP
dialect: 'mysql' // 可以選擇 mysql、mariadb、postgres、mssql 其中一個
});
sequelize.authenticate()
.then(() => {
console.log('資料庫連接成功');
return sequelize.close();
})
.then(() => {
console.log('資料庫連接關閉');
})
.catch((error) => {
console.error(`資料庫連接錯誤:${error}`);
})

資料庫連接關閉

查看 MySQL 連接數

另外如果想查看目前的 MySQL 訪問數可以這樣子操作,由於我們是使用 XAMPP,所以有另一套進入 MySQL 進入的方式

首先先點擊 Shell

點擊 Shell

然後輸入以下指令

1
mysql -u root -p

意旨使用密碼登入 root 帳號,當你送出之後會看到這個畫面

登入 root

那麼你就輸入 root 密碼就可以進入 MySQL 了

登入 MySQL

看到 MariaDB 不用太擔心,MariaDB 本身也就是 MySQL,接下來就輸入以下指令來查看連接數,但是有兩種指令

  • 查看部分連接數量

    1
    show processlist;
  • 查看全部連接數量 (當連接量多時此指令會跑很久)

    1
    show full processlist;

連接數量

退出 MySQL 方式就輸入 \q 即可

參考文獻

sequelize-docs-Zh-CN

ORM 实例教程

0%