美文网首页node2Sequelize
Sequelize(1) 让Node操作MySQL更方便

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

作者: kayorl | 来源:发表于2016-09-14 10:29 被阅读1238次

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

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


    </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',
      /* 数据库类型 */
      dialect: 'mysql' 
    });
    

    </br>

    第一个模型

    定义模型: 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'
      });
    });
    

    </br>



    </br>

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

    // DON'T DO THIS !!!
    
    user = User.findOne()
    
    console.log(user.get('firstName'));
    

    </br>

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

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

    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更方便

        本文链接:https://www.haomeiwen.com/subject/tddvettx.html