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

Sequelize(1) 让Node操作MySQL更方便_第1张图片

Sequelize是一种为 Node.js 和 io.js 提供 promise-based 的 的对象关系映射(ORM),支持 PostgreSQL, MySQL, MariaDB, SQLite 和 MSSQL 等数据库管理系统 ,同时提供 事务支持关系复制还有其他等特性. 本文参考材料: Sequelize

对象关系映射(英语:Object Relational Mapping,简称ORM),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。



例子( 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
  }));
});


安装

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


建立连接

var sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  /* 数据库类型 */
  dialect: 'mysql' 
});


第一个模型

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

var User = sequelize.define('user', {
  firstName: {
    type: Sequelize.STRING,
    /* User模型拥有firstName属性,在数据库中相应的属性为first_name  */
    field: 'first_name'   
    },
  lastName: {
    type: Sequelize.STRING
  }
}, {
  /* 数据库表名与模型名字一致 */
  freezeTableName: true 
});

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





按照以前的习惯,我们可能会通过下面这种方式来获取user.

// DON'T DO THIS !!!

user = User.findOne()

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


然而这行不通(不信去试试)

为什么呢? 接下来引入一个概念

Promises

Sequelize 使用 Promises 控制异步流。 可以看看 Promises -解决Node无限回调

Promises的核心是一个 promise 代表了异步运算的结果,它有三种状态:

  • pending - promise 的初始状态(即将发生)
  • fulfilled - 一次成功运算后 promise 的状态
  • rejected - 一次失败运算后 promise 的状态

function readFile(filename, enc){
/*
*使用 new promise 构建一个新的 promise */
return new Promise(function (fulfill, reject){
fs.readFile(filename, enc, function (err, res){
if (err) reject(err); //失败运算
else fulfill(res); //成功运算
});
});
}




`user`是一个 promise 对象, 不是数据库的对象,正确的打开姿势是,在获取到`user`的状态(如 fulfilled, rejected )后,对其进行操作:

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

你可能感兴趣的:(Sequelize(1) 让Node操作MySQL更方便)