初探 Sequelize

  1. Sequelize 初探
    1. 安裝
    2. 初始化
      1. 生成的檔案

Sequelize 初探

Sequelize 是一個使用 JavaScript 的 ORM。
我自己的使用方式是與 Express 搭配,當作 MVC 的 M

另外,因為官網文件很鳥,所以寫了一個教學流程

安裝

使用 Node.js 盡量不要安裝 -g 因為每個 project 需要的工具,不管是初始化專案還是要維護時使用的套件,都是應該安裝的套件。

$ npm install --save sequelize@"<4.0.0"  //我需要 v3 版
$ npm install --save mysql2
$ npm install --save sequelize-cli

初始化

$ npx sequelize init

生成的檔案

config/config.json

這是用來儲存連線資訊的設定檔,看預設給的,有分成 development, test, production 三種環境變數設定。
可依自己的需要與設定進行修改

{
"development": {
"username": "root",
"password": null,
"database": "database_development",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}

models/index.js

這個檔案很長,是 sequelize-cli 的重點。
透過這段程式碼,幫你管理的幾個部份,成為 MVC 的 M

  • 資料庫連線設定 config.json
  • 還有 Models 的內容 models/index.js

來導讀一下這一段程式碼

第一段,將需要的功能載進來,包含 Sequelize 的套件程式。
並且環境變數設定預設 development
引入 config.json

1
2
3
4
5
6
7
8
9
'use strict';

var fs = require('fs');
var path = require('path');
var Sequelize = require('sequelize');
var basename = path.basename(__filename);
var env = process.env.NODE_ENV || 'development';
var config = require(__dirname + '/../config/config.json')[env];
var db = {};

第二段,就是官網文件會介紹到的連線設定。[1]
引入的 config.json 存成變數 config 並在這此使用它。

10
11
12
13
14
if (config.use_env_variable) {
var sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
var sequelize = new Sequelize(config.database, config.username, config.password, config);
}

如果要使用 env file 的設定,就是使用連線字串的方式連線

env file

{
"production": {
"use_env_variable": 'mysql://root:password@mysql_host.com/database_name'
}
}

第三段,require 將相同目錄底下的 .jsmodel.name 當索引值放到 db 物件中。
執行每一個 model 的 「define」將 資料表與 js 對應上

15
16
17
18
19
20
21
22
23
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
var model = sequelize['import'](path.join(__dirname, file));
db[model.name] = model;
});

第四段,用來執行 db 物件裡的每一個 .associate method
執行每一個 「model 關聯」 的設定,也就是關聯式資料庫的 foreign key 的設定與 js 對應上。

24
25
26
27
28
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});

將全域的物件與類別,也放進 db 物件中。
將所有關於 MVC 的 M 都收斂在 db

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

這兩個資料夾目前都還是空的。

migrations
seeders

就先不要管它。
先看懂程式碼比較重要,對於之後,要如何維護 Model 心裡要有一個底。


  1. Getting Started - Setting up a connection ↩︎