1. 程式人生 > >Node.js使用Sequelize操作MySQL

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 專案:

  1.   $ mkdir myblog
  2.   $ cd myblog
  3.   myblog/ $ npm init

npm init 命令會提示輸入一系列專案資訊,直接一路回車即可。

然後安裝 Sequelize 和 MySQL 包:

  1.   myblog/ $ npm install sequelize --save
  2.   myblog/ $ npm install mysql --save

OK,安裝完畢!

三、實驗步驟

3.1 連線資料庫

首先,需要啟動 MySQL 資料庫:

$ sudo service mysql start

因為 Sequelize 不能建立資料庫,所以需要手動建立一個數據庫:

  1.   $ mysql -uroot
  2.   > create database blog;
  3.   >
  4.    

按 Ctrl+c 鍵退出MySQL命令列介面。

建立了資料庫之後,就可以通過 Sequelize 連線到資料庫了,在 myblog 資料夾中新建 db.js 檔案:

  1.   // db.js
  2.    
  3.   var Sequelize = require('sequelize');
  4.    
  5.   /*
  6.   // new Sequelize(database, [username=null], [password=null], [options={}])
  7.   // class Sequelize 接收4個引數,後三個引數是可選的
  8.    
  9.   // 沒有密碼和options
  10.   var sequelize = new Sequelize('database', 'username')
  11.    
  12.   // 沒有options
  13.   var sequelize = new Sequelize('database', 'username', 'password')
  14.    
  15.   // 沒有密碼有options
  16.   var sequelize = new Sequelize('database', 'username', null, {})
  17.    
  18.   // 都有
  19.   var sequelize = new Sequelize('my_database', 'john', 'doe', {})
  20.    
  21.   // new Sequelize(uri, [options={}])
  22.   // 通過uri連線資料庫
  23.   var sequelize = new Sequelize('mysql://localhost:3306/database', {})
  24.   */
  25.    
  26.   module.exports = new Sequelize('blog', 'root', null, {
  27.   host: 'localhost', // 資料庫地址
  28.   dialect: 'mysql', // 指定連線的資料庫型別
  29.   pool: {
  30.   max: 5, // 連線池中最大連線數量
  31.   min: 0, // 連線池中最小連線數量
  32.   idle: 10000 // 如果一個執行緒 10 秒鐘內沒有被使用過的話,那麼就釋放執行緒
  33.   }
  34.   });

連線資料庫初始化時,Sequelize 會設定一個連線池,所以每個資料庫建立一個例項即可。

連線池是建立和管理一個連線的緩衝池的技術,這些連線準備好被任何需要它們的執行緒使用。

3.2 建立使用者表

下面來建立一張表模型(model),在myblog資料夾中新建user.js檔案:

  1.   // user.js
  2.    
  3.   var Sequelize = require('sequelize');
  4.   var sequelize = require('./db');
  5.    
  6.   // 建立 model
  7.   var User = sequelize.define('user', {
  8.   userName: {
  9.   type: Sequelize.STRING, // 指定值的型別
  10.   field: 'user_name' // 指定儲存在表中的鍵名稱
  11.   },
  12.   // 沒有指定 field,表中鍵名稱則與物件鍵名相同,為 email
  13.   email: {
  14.   type: Sequelize.STRING
  15.   }
  16.   }, {
  17.   // 如果為 true 則表的名稱和 model 相同,即 user
  18.   // 為 false MySQL建立的表名稱會是複數 users
  19.   // 如果指定的表名稱本就是複數形式則不變
  20.   freezeTableName: false
  21.   });
  22.    
  23.   // 建立表
  24.   // User.sync() 會建立表並且返回一個Promise物件
  25.   // 如果 force = true 則會把存在的表(如果users表已存在)先銷燬再建立表
  26.   // 預設情況下 forse = false
  27.   var user = User.sync({ force: false });
  28.    
  29.   // 新增新使用者
  30.   exports.addUser = function(userName, email) {
  31.   // 向 user 表中插入資料
  32.   return User.create({
  33.   user_name: userName,
  34.   email: email
  35.   });
  36.   };
  37.    
  38.   // 通過使用者名稱查詢使用者
  39.   exports.findByName = function(userName) {
  40.   return User.findOne({ where: { user_name: userName } });
  41.   };

3.3 測試使用者表

myblog資料夾中建立testUser.js檔案,測試user.js:

  1.   // testUser.js
  2.    
  3.   var user = require('./user');
  4.    
  5.   // 新增使用者
  6.   user.addUser( 'jack', '[email protected]').then(function() {
  7.   // 查詢新新增的使用者
  8.   return user.findByName('jack');
  9.   }).then( function(user) {
  10.   console.log('****************************');
  11.   console.log('user name: ', user.user_name);
  12.   console.log('user email: ', user.email);
  13.   });

執行testUser.js檔案:

myblog/ $ node testUser.js

可以看到終端的最後打印出了使用者名稱和使用者郵箱,說明建立表和插入資料成功了。也可以登入到MySQL,手動查詢是否成功建立了使用者表和插入了資料。

3.4 建立文章表

myblog資料夾中建立post.js檔案:

  1.   // post.js
  2.    
  3.   var Sequelize = require('sequelize');
  4.   var sequelize = require('./db');
  5.    
  6.   var Post = sequelize.define('post', {
  7.   // 文章標題
  8.   title: {
  9.   type: Sequelize.STRING
  10.   },
  11.   // 文章內容
  12.   content: {
  13.   type: Sequelize.STRING
  14.   },
  15.   // 文章發表時間
  16.   create_at: {
  17.   type: Sequelize.DATE
  18.   }
  19.   }, {
  20.   freezeTableName: false
  21.   });
  22.    
  23.   var post = Post.sync();
  24.    
  25.   // 發表新文章
  26.   exports.newPost = function(title, content) {
  27.   return post.then(function() {
  28.   Post.create({
  29.   title: title,
  30.   content: content,
  31.   create_at: Date.now()
  32.   });
  33.   });
  34.   };
  35.    
  36.   // 查詢所以文章
  37.   exports.findAllPosts = function() {
  38.   return Post.findAll();
  39.   };
  40.    
  41.   // 通過 ID 查詢文章
  42.   exports.findById = function(id) {
  43.   return Post.findById(id);
  44.   };

3.5 測試文章表

新建testPost.js檔案:

  1.   var post = require('./post');
  2.    
  3.   // 插入一篇文章
  4.   post.newPost( 'post title', 'post content').then(function() {
  5.   // 通過ID查詢文章
  6.   return post.findById(1);
  7.   }).then( function(p) {
  8.   console.log('********************************');
  9.   console.log('post title: ', p.title);
  10.   console.log('post content: ', p.content);
  11.   });

執行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/