1.1 實驗內容
Sequelize 是一個 Node.js 平台基於 Promise 的ORM。用於操作管理 MySQL、Postgres、SQLite 等關系型數據庫。本課程主要學習使用 Sequelize 操作 MySQL 數據庫。Sequelize 官方文檔:http://docs.sequelizejs.com/en/latest/
1.2 實驗知識點
- Sequelize 的使用
1.3 實驗環境
- Node.js 6.x
1.4 適合人群
本課程難度為一般,屬於初級級別課程,適合具有 Node.js 基礎的用戶學習 Node.js 連接 MySQL 數據庫的相關開發。
二、開發准備
2.1 初始化項目
首先,創建一個 Node.js 項目:
-
$ mkdir myblog
-
$ cd myblog
-
myblog/ $ npm init
npm init
命令會提示輸入一系列項目信息,直接一路回車即可。
然后安裝 Sequelize 和 MySQL 包:
-
myblog/ $ npm install sequelize --save
-
myblog/ $ npm install mysql --save
OK,安裝完畢!
三、實驗步驟
3.1 連接數據庫
首先,需要啟動 MySQL 數據庫:
$ sudo service mysql start
因為 Sequelize 不能創建數據庫,所以需要手動創建一個數據庫:
-
$ mysql -uroot
-
> create database blog;
-
>
-
按 Ctrl+c
鍵退出MySQL命令行界面。
創建了數據庫之后,就可以通過 Sequelize 連接到數據庫了,在 myblog
文件夾中新建 db.js
文件:
-
// db.js
-
-
var Sequelize = require('sequelize');
-
-
/*
-
// new Sequelize(database, [username=null], [password=null], [options={}])
-
// class Sequelize 接收4個參數,后三個參數是可選的
-
-
// 沒有密碼和options
-
var sequelize = new Sequelize('database', 'username')
-
-
// 沒有options
-
var sequelize = new Sequelize('database', 'username', 'password')
-
-
// 沒有密碼有options
-
var sequelize = new Sequelize('database', 'username', null, {})
-
-
// 都有
-
var sequelize = new Sequelize('my_database', 'john', 'doe', {})
-
-
// new Sequelize(uri, [options={}])
-
// 通過uri連接數據庫
-
var sequelize = new Sequelize('mysql://localhost:3306/database', {})
-
*/
-
-
module.exports = new Sequelize('blog', 'root', null, {
-
host: 'localhost', // 數據庫地址
-
dialect: 'mysql', // 指定連接的數據庫類型
-
pool: {
-
max: 5, // 連接池中最大連接數量
-
min: 0, // 連接池中最小連接數量
-
idle: 10000 // 如果一個線程 10 秒鍾內沒有被使用過的話,那么就釋放線程
-
}
-
});
連接數據庫初始化時,Sequelize 會設置一個連接池,所以每個數據庫創建一個實例即可。
連接池是創建和管理一個連接的緩沖池的技術,這些連接准備好被任何需要它們的線程使用。
3.2 創建用戶表
下面來創建一張表模型(model),在myblog
文件夾中新建user.js
文件:
-
// user.js
-
-
var Sequelize = require('sequelize');
-
var sequelize = require('./db');
-
-
// 創建 model
-
var User = sequelize.define('user', {
-
userName: {
-
type: Sequelize.STRING, // 指定值的類型
-
field: 'user_name' // 指定存儲在表中的鍵名稱
-
},
-
// 沒有指定 field,表中鍵名稱則與對象鍵名相同,為 email
-
email: {
-
type: Sequelize.STRING
-
}
-
}, {
-
// 如果為 true 則表的名稱和 model 相同,即 user
-
// 為 false MySQL創建的表名稱會是復數 users
-
// 如果指定的表名稱本就是復數形式則不變
-
freezeTableName: false
-
});
-
-
// 創建表
-
// User.sync() 會創建表並且返回一個Promise對象
-
// 如果 force = true 則會把存在的表(如果users表已存在)先銷毀再創建表
-
// 默認情況下 forse = false
-
var user = User.sync({ force: false });
-
-
// 添加新用戶
-
exports.addUser = function(userName, email) {
-
// 向 user 表中插入數據
-
return User.create({
-
user_name: userName,
-
email: email
-
});
-
};
-
-
// 通過用戶名查找用戶
-
exports.findByName = function(userName) {
-
return User.findOne({ where: { user_name: userName } });
-
};
3.3 測試用戶表
在myblog
文件夾中創建testUser.js
文件,測試user.js:
-
// testUser.js
-
-
var user = require('./user');
-
-
// 添加用戶
-
user.addUser( 'jack', 'jack@163.com').then(function() {
-
// 查詢新添加的用戶
-
return user.findByName('jack');
-
}).then( function(user) {
-
console.log('****************************');
-
console.log('user name: ', user.user_name);
-
console.log('user email: ', user.email);
-
});
運行testUser.js
文件:
myblog/ $ node testUser.js
可以看到終端的最后打印出了用戶名和用戶郵箱,說明創建表和插入數據成功了。也可以登錄到MySQL,手動查詢是否成功創建了用戶表和插入了數據。
3.4 創建文章表
在myblog
文件夾中創建post.js
文件:
-
// post.js
-
-
var Sequelize = require('sequelize');
-
var sequelize = require('./db');
-
-
var Post = sequelize.define('post', {
-
// 文章標題
-
title: {
-
type: Sequelize.STRING
-
},
-
// 文章內容
-
content: {
-
type: Sequelize.STRING
-
},
-
// 文章發表時間
-
create_at: {
-
type: Sequelize.DATE
-
}
-
}, {
-
freezeTableName: false
-
});
-
-
var post = Post.sync();
-
-
// 發表新文章
-
exports.newPost = function(title, content) {
-
return post.then(function() {
-
Post.create({
-
title: title,
-
content: content,
-
create_at: Date.now()
-
});
-
});
-
};
-
-
// 查找所以文章
-
exports.findAllPosts = function() {
-
return Post.findAll();
-
};
-
-
// 通過 ID 查找文章
-
exports.findById = function(id) {
-
return Post.findById(id);
-
};
3.5 測試文章表
新建testPost.js
文件:
-
var post = require('./post');
-
-
// 插入一篇文章
-
post.newPost( 'post title', 'post content').then(function() {
-
// 通過ID查找文章
-
return post.findById(1);
-
}).then( function(p) {
-
console.log('********************************');
-
console.log('post title: ', p.title);
-
console.log('post content: ', p.content);
-
});
運行testPost.js
文件:
myblog/ $ node testPost.js
可以看到終端的最后打印出了文章標題文章內容,說明創建表和插入數據成功了。也可以登錄到 MySQL,手動查詢是否成功創建了文章表和插入了數據。
通過 Sequelize 操作 MySQL 數據庫很簡單吧!
更多功能可以看看Sequelize文檔:http://docs.sequelizejs.com/en/latest/
四、總結
Sequelize 是一個 Node.js 平台基於 Promise 的ORM。用於操作管理 MySQL、Postgres、SQLite 等關系型數據庫。本課程主要學習使用 Sequelize 操作 MySQL 數據庫。Sequelize 官方文檔:http://docs.sequelizejs.com/en/latest/