当前位置: 首页 > 后端技术 > Node.js

Sequelize中文文档v4-升级到V4-升级到V4

时间:2023-04-03 22:30:20 Node.js

升级到V4-升级到V4本系列文章的应用实例已经发布在GitHub上:sequelize-docs-Zh-CN。您可以通过Fork帮助改进或Star以关注更新。欢迎来到Star。SequelizeV4是一个主要版本,它引入了新功能和重大更改。大量的sequelize代码库已经用ES2015特性进行了重构。以下指南列出了从v3升级到v4的一些更改。有关完整的详细列表,请参阅更改日志。突破性变化Node版本:要使用新的ES2015功能,我们现在至少需要Node4。从现在开始,我们将支持所有当前的Node.jsLTS版本。计数器缓存插件以及相关的计数器缓存选项已被删除。使用afterCreate和afterDelete挂钩可以实现相同的行为。删除了MariaDB方言。这只是MySQL的浅层包装,因此请使用dialect:'mysql而不是进一步更改。删除默认的REPEATABLE_READ事务隔离。隔离级别现在默认为数据库级别。启动事务时明确传递所需的隔离级别。移除了对pool:false的支持。要使用单个连接,请将pool.max设置为1。(MySQL)BIGINT现在会在数字太大时转换为字符串。删除了对referencesKey的支持,改用引用对象。references:{key:'',model:''}classMethods和instanceMethods已被删除。之前:constModel=sequelize.define('Model',{...},{classMethods:{associate:function(model){...}},instanceMethods:{someMethod:function(){...}}});now:constModel=sequelize.define('Model',{...});//类方法Model.associate=function(models){...关联模型};//实例方法Model.prototype.someMethod=function(){..}Model.Instance和instance.Model已被删除。要从实例访问模型,只需使用instance.constructor。实例类(Model.Instance)现在是模型本身。Sequelize现在使用bluebird库的独立副本。sequelize返回的promise现在是一个Sequelize.Promise而不是bluebird的全局Promise实例。CLS补丁不影响bluebird的全球承诺。当与Promise.all和其他bluebird方法一起使用时,事务不会自动传递给方法。显式修补bluebird实例使CLS能够使用bluebird方法。$npminstall--savecls-bluebirdconstPromise=require('bluebird');constSequelize=require('sequelize');constcls=require('continuation-local-storage');constns=cls.createNamespace('transaction-namespace');constclsBluebird=require('cls-bluebird');clsBluebird(ns,Promise);Sequelize.useCLS(ns);Sequelize.Validator现在是MySQL和Postgres的验证程序库DataTypes.DECIMAL返回isstring.DataTypes.DATE现在使用DATETIMEOFFSET而不是DATETIME2sql数据类型,以防MSSQL记录时区。要将现有的DATETIME2列迁移到DATETIMEOFFSET,请参阅#7201.options.order现在只接受数组类型或Sequelize方法的值。最初支持的字符串值(即{order:'nameDESC'})已被弃用。使用BelongsToMany关系添加/设置/创建setter现在通过将它们作为options.through传递来设置属性(以前第二个参数被用作through属性,现在它被认为是through的选项作为子选项)。以前:user.addProject(project,{status:'started'})现在:user.addProject(project,{through:{status:'started'}})DATEONLY现在以YYYY-MM-DD格式返回,而不是DateStringModel.validate实例方法默认运行验证挂钩。以前你需要传递{hooks:true}。您可以通过传递{hooks:false}来覆盖此行为。当验证失败时,来自Model.validate实例方法的结果将被拒绝。这只有在成功验证后才有可能。raw参数where,order和group如where:{$raw:'..',order:[{raw:'..'}],group:[{raw:'..'}]}删除防止SQL注入攻击。Sequelize.Utils不再是公共API的一部分,使用它需要您自担风险。钩子现在应该返回承诺。不支持回调。添加了新函数sequelize.sync({alter:true})的初始版本,并使用ALTERTABLE命令同步表。Migrate仍然是首选,应该在生产中使用。现在支持添加和删除数据库约束。现在可以使用迁移添加/删除现有的主键、外键和其他约束-查看更多。实例(数据库行)现在是模型的实例,而不是单独类的实例。这意味着您可以将User.build()替换为newUser()并将sequelize.define(attributes,options)替换为classUserextendsSequelize.Model{}User.init(attributes,options)然后,您可以直接在类中定义自定义方法、类方法和getter/setter。这也支持更多的使用模式,例如与装饰器。添加了调试支持。现在可以使用DEBUG=sequelize*nodeapp.js为所有sequelize操作启用日志记录。要过滤记录的查询,请使用DEBUG=sequelize:sql:mssqlsequelize:connection*来记录生成的SQL查询、连接信息等。SQLite添加了JSON数据类型支持。UPSERT现在支持使用MERGE语句的MSSQL。事务现在完全支持MSSQL。MSSQL方言现在支持过滤索引。queryInterface.addIndex('Person',['firstname','lastname'],{where:{lastname:{$ne:null}}})如果这篇文章对你有帮助,请点赞或starGitHub:sequelize-docs-zh-CN支持,谢谢。