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
npm install sequlize --save
$ npm install --save pg pg-hstore
$ npm install --save mysql // For both mysql and mariadb dialects
$ npm install --save sqlite3
$ 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'
});
});
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql
create database test;
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().then(function () {
return User.create({
firstName: 'John',
lastName: 'Hancock'
});
});