2015年8月15日 星期六

Node.js的RDBMS ORM利器 - sequelize

sequelize

sequelize不是DB連線的工具,但它可以幫助你跟所有資料庫做好orm的溝通,可以說是屬於node.js的hibernate套件,透過很完整的物件規範,讓每次的資料輸入可以直接與資料庫對應。

Github repository

官方文件

Installation

npm install sequlize --save
在與資料庫連線使用時,需要搭配各個資料庫的模組,官方建議有下面幾種資料庫的搭配套件:
postgresql的套件:
$ npm install --save pg pg-hstore
mysql的套件:
$ npm install --save mysql // For both mysql and mariadb dialects
sqlite3的套件:
$ npm install --save sqlite3
mssql的套件:
$ npm install --save tedious // MSSQL

Sample

在測試前,我們需要準備一個資料庫,下面以mysql資料庫維利,我們透過docker來啟動mysql
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql
接下來建立所有連線的資料庫,我們這邊建立一個test資料庫
create database test;
建立DB之後,下面的程式可以用來連線,並且建立:
var Sequelize = require('sequelize')
//初始化sequelize,這邊指定docker mysql的位置
//(我是用boot2docker,所以在本地需要指定給boot2docker的位置)
var sequelize = new Sequelize('test', 'root', 'password', {
  host: '192.168.59.103',
  dialect: 'mysql',
  pool: {
    max: 5,
    min: 0,
    idle: 10000
  }});

//建立物件模型
var User = sequelize.define('user', {
  firstName: {
    type: Sequelize.STRING,
    field: 'first_name' 
  },
  lastName: {
    type: Sequelize.STRING
  }
}, {
  freezeTableName: true 
});

//實作資料新增
User.sync({force: true}).then(function () {
  return User.create({
    firstName: 'John',
    lastName: 'Hancock'
  });
});
其中,User.sync()中使用{force: true}會讓城市每次執行的時候強制刪除資料庫,並且重新建立資料庫。這比較適合在測試環境中執行,而正式環境,則需要把force拿掉...
User.sync().then(function () {
  return User.create({
    firstName: 'John',
    lastName: 'Hancock'
  });
});