在 Sequelize 中,校验器是一个关键的部分,它用于验证传递给模型的数据是否有效。 Sequelize 自带有一些常见的校验器,比如 notEmpty
、isEmail
、isUrl
等等。同时,Sequelize 还允许用户自定义校验器。
在本文中,我们将介绍如何自定义一个校验器来检查字段是否唯一。我们将通过 validator
和 unique-validator
来展示这个过程。
validator
模块
validator
模块是 Node.js 中的一个独立的验证器库。它提供了各种验证函数,如字符串长度验证、电子邮件验证、URL 验证等等。我们可以使用它来验证传递给模型的数据。
如果你在项目中使用了 validator
,那么你可以直接在模型中使用它来自定义校验器。
例如,检查邮箱是否唯一可以使用 validator
的 isEmail
和 unique
函数来实现:
-- -------------------- ---- ------- ----- --------- - --------------------- ----- - --------- - - --------------------- ----- ---- - ------------------------ - ------ - ----- ----------------- ---------- ------ --------- - -------- ----- ----- ------------- - ----- ------ - ----- -------------- ------ - ------ ----- - --- -- -------- - ----- --- ------------ ------- --------- - -- -- -- ---
在上面的例子中,我们在 validate
对象中定义了一个名为 unique
的自定义校验器。它使用了 validator
的 unique
函数来检查邮箱是否唯一,如果已经存在,那么就抛出一个错误。使用 async
和 await
关键字可以确保异步查询将在校验器函数之前执行。
unique-validator
模块
unique-validator
是一个 Node.js 的库,它扩展了 validator
,添加了一个名为 isUnique
的函数,用于检查字段是否唯一。
使用 unique-validator
来自定义校验器非常简单。我们只需要在模型的定义中设置 validate
属性即可。
-- -------------------- ---- ------- ----- --------- - --------------------- ----- --------------- - -------------------------------------- ----- ---- - ------------------------ - ------ - ----- ----------------- ---------- ------ ------- ----- --------- - -------- ----- -- -- -- - --------- - -------------------------- - -------------- ------ - ------ ---------- -- ------------ -- - -- ------ - ------ -------- ----------- ----- -- ------- -- -------- - ------- --- -- -- --- ----------- ------ ---- ---------- -- - -- ---- ---------- ------------- ------ --------------- ---------- -- - --------------------- --------------- -------------- -- - ----------------- --- ---
在上面的例子中,我们在模型定义中设置了 unique
属性为 true
,这将使 Sequelize 使用 unique-validator
校验器来验证该字段是否唯一。同时,我们还设置了 validate.checkEmailUniqueness
函数来验证字段的唯一性。
此函数将在 beforeValidate
钩子中执行,在保存模型之前进行检查。如果执行成功,则不会向存储系统中写入数据,并在控制台输出“Inserted Successfully”。
总结
自定义校验器能够让我们随心所欲地验证数据,并检查字段是否唯一。 上述两种自定义校验器都可以实现这个目标,仁者见仁智者见智,选择合适的方法才是最重要的。
学习 Sequelize 自定义校验器的过程将使我们更加熟悉 Sequelize,这对我们开发实际项目时将非常有用。希望这篇文章对你有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64870df548841e98945b9ac4