Sequelize官方中文文档 13. Upgrade to V

2019-05-09  本文已影响0人  振礼硕晨

Sequelize官方GitHub:https://github.com/sequelize/sequelize
Sequelize官方中文文档:https://github.com/demopark/sequelize-docs-Zh-CN
Sequelize官方英文文档:http://docs.sequelizejs.com/

Upgrade to V5 - 升级到 V5

Sequelize v5 是 v4 之后的下一个主要版本

突破性变化

支持 Node 6 以及更高版本

Sequelize v5 将仅支持 Node 6 以及更高版本 #9015

安全的运算符

在 v4 中,你会开始收到弃用警告 String based operators are now deprecated (基于字符串的运算符现在已弃用)。 同时也介绍了运算符的概念。这些运算符是一些防止散列注入攻击的符号。

对于 v5

对于 v5 Sequelize现在使用 sequelize-pool,它是 generic-pool@2.5 的现代化分支。 你不再需要调用 sequelize.close 来关闭池,这有助于 lambda 执行。#8468

模型

验证器

现在,当属性的值为 nullallowNulltrue 时,运行每个属性定义的自定义验证器(与模型选项中定义的自定义验证器相对,之前它们没有运行且验证立即成功)。为了避免升级时出现问题,请检查每个属性定义的所有自定义验证器,其中 allowNulltrue,并确保当值为 null 时所有这些验证器都能正常运行。 参见 #9143

属性

Model.attributes 现在已被移除, 请使用 Model.rawAttributes#5320

注意: 请不要将它与 options.attributes 混淆,它们仍然有效

偏执模式

对于 v5 如果设置了 deletedAt, 该数据将被视为已删除. paranoid 选项只会使用 deletedAt 作为标志。 #8496

Model.bulkCreate

updateOnDuplicate 选项用于接受布尔值和数组,现在只接受非空的数组属性。 #9288

下划线模式

Model.options.underscored 的实现方式被改变了。你可以在 这里 找到完整的说明 。

大致内容

  1. underscoredAllunderscored 选项都合并为一个 underscored 选项
  2. 现在,所有属性都默认使用 camelcase 命名生成。 将 underscored选项设置为 true,属性的 field 选项将被设置为属性名称的下划线版本。
  3. underscored 将控制所有属性,包括时间戳,版本和外键。 它不会影响任何已经指定 field 选项的属性。

#9304

删除的别名

许多基于模型的别名已被删除 #9372

v5 删除 官方替代
insertOrUpdate upsert
find findOne
findAndCount findAndCountAll
findOrInitialize findOrBuild
updateAttributes update
findById, findByPrimary findByPk
all findAll
hook addHook

数据类型

范畴

现在只支持一种标准格式 [{ value: 1, inclusive: true }, { value: 20, inclusive: false }] #9364

网络类型

为 Postgres 添加了对CIDRINETMACADDR 的支持

不区分大小写的文本

为 Postgres 和 SQLite 添加了对 CITEXT 的支持

已删除

NONE 类型已被删除,请使用 VIRTUAL

Hooks

删除的别名

Hooks aliases has been removed #9372

Rv5 删除 官方替代
[after,before]BulkDelete [after,before]BulkDestroy
[after,before]Delete [after,before]Destroy
beforeConnection beforeConnect

Sequelize

删除的别名

已删除许多常量,对象和类的原型引用 #9372

v5 删除 官方替代
Sequelize.prototype.Utils Sequelize.Utils
Sequelize.prototype.Promise Sequelize.Promise
Sequelize.prototype.TableHints Sequelize.TableHints
Sequelize.prototype.Op Sequelize.Op
Sequelize.prototype.Transaction Sequelize.Transaction
Sequelize.prototype.Model Sequelize.Model
Sequelize.prototype.Deferrable Sequelize.Deferrable
Sequelize.prototype.Error Sequelize.Error
Sequelize.prototype[error] Sequelize[error]
import Sequelize from 'sequelize';
const sequelize = new Sequelize('postgres://user:password@127.0.0.1:mydb');

/**
 * In v4 you can do this
 */
console.log(sequelize.Op === Sequelize.Op) // logs `true`
console.log(sequelize.UniqueConstraintError === Sequelize.UniqueConstraintError) // logs `true`

Model.findAll({
  where: {
    [sequelize.Op.and]: [ // Using sequelize.Op or Sequelize.Op interchangeably
      {
        name: "Abc"
      },
      {
        age: {
          [Sequelize.Op.gte]: 18
        }
      }
    ]
  }
}).catch(sequelize.ConnectionError, () => {
  console.error('Something wrong with connection?');
});

/**
 * In v5 aliases has been removed from Sequelize prototype
 * You should use Sequelize directly to access Op, Errors etc
 */

Model.findAll({
  where: {
    [Sequelize.Op.and]: [ // Dont use sequelize.Op, use Sequelize.Op instead
      {
        name: "Abc"
      },
      {
        age: {
          [Sequelize.Op.gte]: 18
        }
      }
    ]
  }
}).catch(Sequelize.ConnectionError, () => {
  console.error('Something wrong with connection?');
});

查询接口

其它

更新日志

5.0.0-beta.16

5.0.0-beta.15

5.0.0-beta.14

5.0.0-beta.13

5.0.0-beta.12

5.0.0-beta.11

5.0.0-beta.10

5.0.0-beta.9

5.0.0-beta.8

5.0.0-beta.7

5.0.0-beta.6

5.0.0-beta.5

5.0.0-beta.4

5.0.0-beta.3

5.0.0-beta.2

5.0.0-beta.1

5.0.0-beta

上一篇下一篇

猜你喜欢

热点阅读