Sequelize(1) 讓Node操作MySQL更方便

Sequelize是一種為 Node.js 和 io.js 提供 promise-based 的 的對象關(guān)系映射(ORM),支持 PostgreSQL, MySQL, MariaDB, SQLite 和 MSSQL 等數(shù)據(jù)庫管理系統(tǒng) ,同時提供 事務(wù)支持關(guān)系復(fù)制還有其他等特性. 本文參考材料: Sequelize

對象關(guān)系映射(英語:Object Relational Mapping,簡稱ORM),是一種程序設(shè)計技術(shù),用于實現(xiàn)面向?qū)ο缶幊陶Z言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。從效果上說,它其實是創(chuàng)建了一個可在編程語言里使用的“虛擬對象數(shù)據(jù)庫”。


</br>

例子( mysql 為例 )

var Sequelize = require('sequelize');
var sequelize = new Sequelize('database', 'username', 'password');

var User = sequelize.define('user', {
  username: Sequelize.STRING,
  birthday: Sequelize.DATE
});

sequelize.sync().then(function() {
  return User.create({
    username: 'janedoe',
    birthday: new Date(1980, 6, 20)
  });
}).then(function(jane) {
  console.log(jane.get({
    plain: true
  }));
});

</br>

安裝

$ npm install --save sequelize
$ npm install --save mysql

</br>

建立連接

var sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  /* 數(shù)據(jù)庫類型 */
  dialect: 'mysql' 
});

</br>

第一個模型

定義模型: sequelize.define('name', {attributes}, {options})

var User = sequelize.define('user', {
  firstName: {
    type: Sequelize.STRING,
    /* User模型擁有firstName屬性,在數(shù)據(jù)庫中相應(yīng)的屬性為first_name  */
    field: 'first_name'   
    },
  lastName: {
    type: Sequelize.STRING
  }
}, {
  /* 數(shù)據(jù)庫表名與模型名字一致 */
  freezeTableName: true 
});

User.sync({force: true}).then(function () {
  // Table created
  return User.create({
    firstName: 'kayor',
    lastName: 'lien'
  });
});

</br>



</br>

按照以前的習(xí)慣,我們可能會通過下面這種方式來獲取user.

// DON'T DO THIS !!!

user = User.findOne()

console.log(user.get('firstName'));

</br>

然而這行不通(不信去試試??)

為什么呢? 接下來引入一個概念

Promises

Sequelize 使用 Promises 控制異步流。 可以看看 Promises -解決Node無限回調(diào)

Promises的核心是一個 promise 代表了異步運算的結(jié)果,它有三種狀態(tài):

  • pending - promise 的初始狀態(tài)(即將發(fā)生)
  • fulfilled - 一次成功運算后 promise 的狀態(tài)
  • rejected - 一次失敗運算后 promise 的狀態(tài)

function readFile(filename, enc){
/*
*使用 new promise 構(gòu)建一個新的 promise */
return new Promise(function (fulfill, reject){
fs.readFile(filename, enc, function (err, res){
if (err) reject(err); //失敗運算
else fulfill(res); //成功運算
});
});
}




`user`是一個 promise 對象, 不是數(shù)據(jù)庫的對象,正確的打開姿勢是,在獲取到`user`的狀態(tài)(如 fulfilled, rejected )后,對其進行操作:

User.findOne().then(function (user) {
console.log(user.get('firstName'));
});

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容