Sequelize 筆記 (1) — 安裝與設定

黃翌軒
Ian 的摳頂小學堂
5 min readJun 15, 2019

今天要來介紹的是 Sequelize 這個 ORM,所謂的 ORM 是 Object Relational Mapping,ORM 扮演的角色就像一個中介者,它讓我們在程式裡頭可以直接用「物件導向」的方式去操作資料庫,說得更白話一點,就是我們在程式裡頭可以透過創立一個物件,並用這個物件裡各式各樣的 method 去操作對應的資料庫表格,而不用自己寫 SQL 去操作資料庫。

e.g. 我們可以在程式中建立「User」這個物件,去操作資料庫中「Users」這個表格(新增、讀取、更新、刪除)。

透過物件直接去操作資料庫的CRUD,不用再另外寫 SQL 。

安裝

Sequelize可以串接多種關聯式資料庫,包含 MySQL / PostgreSQL / SQLServer …,這篇筆記我們用 MySQL 來進行操作,並且我們是用 Express 這個 Node.js 的輕量級套件來開發,所以如果要跟著以下的教學一起實作,必須要先裝好這兩個東西,並進行 express 專案的初始設定,以下就不進行示範了。

首先,我們要使用 npm 下載相關的套件,從 terminal 打開你的專案資料夾(或是從任何編輯器內附的 terminal 視窗也可以),輸入

npm install sequelize mysql2

此外,我們還必須安裝 sequelize-cli 這個 command line interface tool,之後才能透過一些指令建立、修改相關的檔案。這邊為了方便起見,我們把它裝在全域環境下,你也可以裝在你的專案底下的 node_modules,但是在之後輸入指令時要先切換到 node_modules 的路徑才能執行 sequelize-cli。在終端機輸入

npm install sequelize-cli -g

如此一來就安裝完需要用到的套件了。

初始化

安裝完後我們就可以來進行相關的設定了。

首先,開啟 terminal,在專案資料夾底下輸入

sequelize init

如果 sequelize-cli 不是裝在全域環境的話,就必須到 node_modules 的路徑去找到 sequelize-cli。

輸入完這個指令後,sequelize-cli 會自動幫你建立一些檔案跟資料夾。

專案資料夾底下多了這些資料夾

  • config – 裡面多了 config.json
  • models – 裡面多了 index.js
  • migrations, seeders – 目前裡面沒有檔案

設定資料庫連線

要怎麼去跟資料庫連線呢?答案就是透過剛剛 sequelize-cli 幫我們新增的 config.json。

打開 config.json,你可以看到以下的畫面

裡面有三個子物件:development, test, production,分別是在 開發、測試、生產環境裡要去連到不同的資料庫,因為開發跟測試多是在 local 進行,而正式要部署的時候,就會把資料庫跟伺服器部署到雲端上,所以到時也必須修改 production 裡面的設定。

我們現在只修改 development 就好,在這之前必須下載並裝好 MySQL,從 MySQL Workbench 裡面建立一個新的連線(connection),設定你記得住的 username 跟 password,並將 development 裡面的 username 跟 password 換成你自己設定的。

username 跟 password 可以隨便設,自己記得就好

在那之後,進去你新增的 connection,新增一個 叫做 test 的 database。你可以輸入

create database test;

執行之後,重新整理右邊的 Schemas 就會看到 test 這個資料庫。

接著將 config.json 裡的 database 換成 test,至於 host 是 資料庫的位址,目前是在我們自己的本機,所以是 127.0.0.1,dialect 則是要連結的資料庫種類,就是 mysql,不需要更改。

接著我們來看看 models 裡面的 index.js

第 12 行到第 16 行的動作是 Sequelize 去連接資料庫,接著,從第 18 行到第 26 行是去將 models 裡面的所有 model 給讀取出來,並且將每個 model 放到 db 這個物件裡面。第 28 行到第 32 行是去設定關聯(association),最後再把 db 這個物件給 export。

如此一來我們就完成初始的設定了,下一篇要來講怎麼透過 Sequelize 去操作資料庫。

--

--