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', 'jack@163.com').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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM