Sequelize 升级到 V6

Sequelize v6 是 v5 之后的下一个主要版本. 以下列出了一些重大更改以帮助你进行升级.

重大变化

支持 Node 10 以及更高

Sequelize v6 将支持 Node 10 及更高版本 #10821.

CLS

你现在应该使用 cls-hooked 软件包来支持 CLS.

  const cls = require('cls-hooked');
  const namespace = cls.createNamespace('....');
  const Sequelize = require('sequelize');

  Sequelize.useCLS(namespace);

Bluebird 现在支持 async_hooks. 调用 Sequelize.useCLS 时将自动启用此配置. 这样,不再需要使用 cls-bluebird.

模型

options.returning

参数 returning: true 将不再返回模型中未定义的属性. 之前旧的行为可以通过使用 returning: ['*'] 来实现.

Model.changed()

现在,此方法使用 _.isEqual 进行相等性测试,并且现在可以识别 JSON 对象. 修改 JSON 对象的嵌套值不会将其标记为已更改(因为它仍然是同一对象).

  const instance = await MyModel.findOne();

  instance.myJsonField.someProperty = 12345; // 更改为 12345
  console.log(instance.changed()); // false

  await instance.save(); // 这不会保存任何东西

  instance.changed('myJsonField', true);
  console.log(instance.changed()); // ['myJsonField']

  await instance.save(); // 将会保存