Sequelize 是 Node.js 中一个非常流行的 ORM 库,它可以使我们更方便地操作数据库。然而,由于用户输入数据的不可控性,如果我们不加以限制,就会导致数据安全问题。因此,Sequelize 引入了验证机制,以保证数据库数据的合法性。
本文将详细地介绍 Sequelize 中的验证机制,包括验证选项、内置验证器、自定义验证器等,并提供代码示例以便读者更好地理解。
验证选项
在 Sequelize 中,我们可以在定义模型时为其添加验证选项,以控制其属性的数据类型、长度、取值范围等。常见的验证选项包括:
type
:表示属性的数据类型,例如Sequelize.STRING
表示字符串类型。allowNull
:表示属性是否允许为空,默认为true
。validate
:表示属性的验证选项,可以是内置验证器或自定义验证器。
例如,下面是定义一个用户模型的代码示例:
-- -------------------- ---- ------- ----- ---- - ------------------------ - --------- - ----- ----------------- ---------- ------ ------- ----- --------- - --------- ----- -- ----- ---- --- ---- -- ----- --------------- ---- -- ----- - -- --------- - ----- ----------------- ---------- ------ --------- - --------- ----- ---- --- --- - - ---
在上面的代码中,username
和 password
都是模型的属性,其中 username
添加了三个内置验证器,分别检查其是否为空、长度是否在 6 到 16 之间、是否由字母和数字组成。而 password
只添加了两个内置验证器,保证其非空且长度在 6 到 16 之间。
内置验证器
Sequelize 内置了许多验证器,我们可以通过添加 validate
选项来使用它们。下面是部分内置验证器的介绍:
notEmpty
:检查字符串是否非空。len
:检查字符串长度是否在某个范围内。is
:使用正则表达式检查字符串是否匹配某种格式。not
:使用正则表达式检查字符串是否不匹配某种格式。isEmail
:检查字符串是否符合邮箱格式。isUrl
:检查字符串是否符合 URL 格式。isInt
:检查数字是否为整数。isDecimal
:检查数字是否为小数。
例如,我们可以使用 isEmail
验证器来检查邮箱格式是否正确:
-- -------------------- ---- ------- ----- ---- - ------------------------ - ------ - ----- ----------------- ---------- ------ ------- ----- --------- - -------- ---- - -- --------- - ----- ----------------- ---------- ------ --------- - --------- ----- ---- --- --- - - ---
自定义验证器
如果内置验证器无法满足需求,我们也可以自定义验证器。自定义验证器的语法与内置验证器类似,其值可以是一个数组或一个函数。如果是数组,则它的元素是一个对象,包含 msg
和 args
两个属性,分别表示验证失败时返回的错误信息和验证器使用的参数。如果是函数,则其参数为属性值和 Model 实例,并返回一个 Promise,如果返回的 Promise 被 reject,则验证失败,否则验证成功。
例如,下面是一个使用自定义验证器的例子,我们要检查用户名是否已被使用:
-- -------------------- ---- ------- ----- ---- - ------------------------ - --------- - ----- ----------------- ---------- ------ ------- ----- --------- - --------- ----- --------- ----- --------------- - ----- ---- - ----- -------------------------- ------ - --------- ----- - --- -- ------ - ----- --- --------------- ------- --------- - - - -- --------- - ----- ----------------- ---------- ------ --------- - --------- ----- ---- --- --- - - ---
在上面的代码中,isUnique
验证器使用了 Model 类的 findOne
方法来查询用户名是否已存在,如果存在则抛出异常。
总结
通过本文的介绍,我们了解了 Sequelize 中的验证机制,包括验证选项、内置验证器和自定义验证器。验证机制可以有效地保证数据库数据的合法性和安全性。如果我们想要更好地使用 Sequelize,就需要熟悉和掌握这些验证机制。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e17e6af6b2d6eab3ca9bd2