Node.JS使用Sequelize操作MySQL的示例代码(3)

then方法的参数是一个function对象,该function对象有一个data参数,这个data参数就是前面create方法操作的数据对象,可以从data里面获得数据在数据库中的id是什么。

通过await和async来实现同步编程效果

通过then的方式很像是嵌套function的回调式异步编程,有些有不喜欢嵌套function的人可以采用await来实现同步编程的效果,更多关于await的用法这里不讨论。

(async () => {
  var data = await Notices.create({
    content: '我是公告内容。',
    title: '系统公告的标题',
    gmId: '10086',
    status: 0,
    expireDate: 1527396599123,
    startDate: Date.now()
  });

  res.json({ code: 0, msg: '公告发布成功', result: data });
})();

await修饰的函数调用必须写在async修改的函数里面,否则会报错,所以这里在最外层包了一个即时函数。

关于即时函数的概念可以参考《JavaScript面向对象编程指南》这本书,里面说的挺详细的。简单说就是定义后立刻调用的一个函数。

修改数据

使用模型对象的update方法可以修改数据:

Notices.update({
  status: 2
}, {
  where: {id: 100}
});

updata(values, opts)方法的第一个参数是要修改的数据集合,字段名称和数据表对应。第二个参数是相关的一些操作参数,where用于限制修改的数据的条件,和SQL语句的where作用一样。

上面的效果是修改id为100的数据的status字段的值为2。

查询数据

通过数据模型对象的find相关的方法可以实现查询效果:

查询所有数据

Notices.findAll();

改方法会返回Notices表中所有的数据,返回值依然是一个Promise对象。

条件查询

Notices.findAll({order: [['createAt', 'DESC']], limit: 10, where: {'status': 0}});
  • order字段用于指定排序规则,这里指定以createAt字段做降序排序。
  • limit字段用于指定查询的数据量,这里表示返回前10条数据。
  • where字段用于指定条件查询,这里表示查询status为0的数据。

删除数据

通过数据模型对象的destroy方法可以销毁一条数据,具体用法和查询、修改等类似。

但是通常我们做删除操作的时候并不是真的将数据从数据库中抹除,而是通过数据的状态字段去标识,方便后续维护。所以每个表通常都会定义一个status字段。

复杂的where条件

在sequelize中,还存在一个Op对象,用于处理复杂的条件操作。

[案例一]

var seq = require('sequelize');
var Op = seq.Op;

// 其它代码... 

Model.update({
  status: 2,
  gmId: 10086
}, {
  where: {
    id: {
      [Op.in]: [1, 4, 2, 8, 13, 20]
    }
  }
}); 

      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6188.html