Sequelize 是一个 Node.js ORM(Object-Relational Mapping) 库,用于操作各种关系型数据库,如 MySQL、PostgreSQL 等。由于其易于使用且文档齐全,Sequelize 已经成为了使用 Node.js 开发 Web 应用的首选 ORM 库。但是,在使用 Sequelize 过程中,还是有一些常见的坑需要注意。
坑1:默认添加 createdAt 和 updatedAt 字段
在使用 Sequelize 创建模型时,如果没有设置 timestamps 属性,则默认会添加 createdAt 和 updatedAt 两个时间戳字段。这在有些场景下是不需要的,如使用已有的数据库表时。解决方法是在模型定义时将 timestamps 属性设置为 false:
const User = sequelize.define('User', { // ... }, { timestamps: false });
坑2:自定义主键时需要显式指定 autoIncrement
如果你需要在你的模型中使用自定义主键,那么你需要通过显式指定 autoIncrement 属性来告诉 Sequelize 这是一个自增的主键,否则在创建数据时可能会出现错误:
const User = sequelize.define('User', { myId: { type: Sequelize.INTEGER, // 或其他数据类型 primaryKey: true, autoIncrement: true }, // ... });
坑3:调用 findOne 方法时不要勿传参数
从 Sequelize v6 版本开始,findOne 方法在调用时不再接受参数。如需要指定查询条件,请使用 where 属性:
-- -------------------- ---- ------- -- --- -------------- ------ - ----- ------- - --- -- --- -------------- ------ - ----- ------- - ---
坑4:调用 sum 和 count 方法时需要指定属性
在使用 sum 和 count 方法计算某些数据的总和或数量时,需要指定需要计算的属性名:
-- -------------------- ---- ------- -- ----------- ----------------- - ------ - ------- --- - --- -- --------- -------------
坑5:where 条件中的数组需要使用 $in 操作符
在使用 where 属性指定查询条件时,如果需要查询某个属性为一个数组中的某个元素时,需要使用 $in 操作符:
// 查询 userId 属性值为 1、2 或 3 的所有 User 记录 User.findAll({ where: { userId: { $in: [1, 2, 3] } } });
PS:以上仅代表本人个人观点,如果有错误之处还请指正。
总结
以上是 Sequelize 中的一些常见坑点,希望能对你在实际项目中避免一些不必要的错误。当然,Sequelize 还有很多其他的功能和用法,有兴趣的同学可以去阅读其官方文档以深入了解。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645f2202968c7c53b0137f37