Node.js使用Sequelize操作MySQL
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', '[email protected]').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/