Sequelize 是一个强大的 Node.js ORM 库,用于与 SQL 数据库交互。在 Sequelize 中,为了避免手动填充数据库中的每个字段,我们可以使用默认值来自动填充某些字段。本文将介绍如何在 Sequelize 中使用默认值,以及如何使用 Sequelize 提供的其他功能来提高开发效率。
设定默认值
在 Sequelize 中,我们可以在模型定义中使用 defaultValue
属性来设置默认值。例如,我们希望 User
模型中的 isAdmin
字段默认为 false
:
----- ---- - ------------------------ - --------- ----------------- -------- - ----- ------------------ ------------- ----- - ---
当我们创建新用户时,不需要手动为 isAdmin
字段赋值。如果我们没有传入 isAdmin
值,则默认为 false
。
还可以使用回调函数作为默认值,例如:
----- ---- - ------------------------ - --------- ----------------- ---------- - ----- --------------- ------------- ---------- - ------ --- ------- - - ---
这里我们在 lastLogin
字段中设置了默认值为当前时间。
使用 getters 和 setters 来处理默认值
有时我们需要使用默认值,但希望在设置值之前进行某些操作。例如,我们可能希望在设置 password
字段之前对其进行加密。Sequelize 提供了 getters 和 setters 来帮助我们处理这些操作。
我们可以在字段定义中指定 get
和 set
函数来设置字段值。例如,在 User
模型中,我们希望对 password
字段进行加密:
----- ------ - ------------------ ----- ---- - ------------------------ - --------- ----------------- --------- - ----- ----------------- ----- - ----- -------- - ------------------------------ ------ ------------------------- ---- -- ---------- - ----- ----------- - ---------------------- ---- ----------------------------- ------------- - - ---
在上面的代码中,我们使用 bcrypt
生成加密后的密码。在 get
函数中,我们使用 this.getDataValue('password')
获取原始密码,然后使用 bcrypt.hashSync()
进行加密并返回。在 set
函数中,我们将传入的值 value
哈希并使用 this.setDataValue('password', hashedValue)
设置字段值。
使用 hooks
在 Sequelize 中,hooks 允许您在模型的生命周期中执行代码。例如,我们可以使用 hooks 在创建用户时设置默认属性值:
----- ---- - ------------------------ - --------- ----------------- ---------- --------------- ---------- --------------- ---------- -------------- -- - ------ - ------------- ------ -- - -------------- - --- ------- -------------- - --- ------- -------------- - --- ------- - - ---
在上面的代码中,我们在创建用户之前设置了 lastLogin
、createdAt
和 updatedAt
属性。
结论
在 Sequelize 中使用默认值可以自动填充数据库中的某些字段,进而提高开发效率。除了默认值,Sequelize 还具有许多其他功能,例如 getters 和 setters 和 hooks,使我们可以更轻松地管理数据库。使用默认值、getters、setters 和 hooks 等技巧将帮助您在 Sequelize 中更有效地工作。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671f53812e7021665efd065e