如何在 Sequelize 中使用自定义数据验证规则
Sequelize 是一个强大的 Node.js ORM,它提供了许多灵活的功能,例如模型定义、关系映射、数据验证和查询构建等。在使用 Sequelize 进行开发时,你可能会遇到需要添加自定义数据验证规则的情况。本篇文章将介绍如何在 Sequelize 中使用自定义数据验证规则。
不必担心,即使你之前没有使用过 Sequelize,这篇文章也将为你进行详细的介绍和解释。在开始之前,确保你已经安装了最新版本的 Sequelize。
首先,什么是数据验证规则?
数据验证规则是用于确保我们在数据库中存储的数据是有效的(有意义的)规则。
对于 Sequelize,其提供了许多内置数据验证规则。例如:
notNull - 值不能为 null 或 undefined
isEmail - 值必须是有效的电子邮件地址
isInt - 值必须是整数
isIn - 值必须在给定的数组中
isUrl - 值必须是有效的 URL 字符串
这些内置数据验证规则可能不够满足我们的需求,因此我们需要自定义数据验证规则。
要添加自定义数据验证规则,请按照以下步骤操作:
步骤 1
首先,打开我们的模型文件,例如 user.js,在其中添加数据验证规则。
在这里,我们将在模型中添加一个名为 isValidPhoneNumber 的自定义数据验证规则。
const { Model, DataTypes } = require('sequelize');
class User extends Model {}
User.init({ // 省略其他属性
phoneNumber: { type: DataTypes.STRING, allowNull: false, validate: { isValidPhoneNumber: function(value) { if (!/^1(3|4|5|7|8)\d{9}$/.test(value)) { throw new Error('手机号码格式不正确'); } } } }
}, { sequelize, modelName: 'user' });
module.exports = User;
在上面的模型中,我们添加了一个名为 phoneNumber 的属性,类型为字符串且不允许为空。我们还添加了一个名为 isValidPhoneNumber 的自定义数据验证规则。
步骤 2
其次,我们需要在 index.js 文件中定义我们的自定义数据验证规则。
const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'mysql', host: 'localhost' });
const User = sequelize.import('./models/user.js');
// 自定义数据验证规则 User.prototype.isValidPhoneNumber = function() { if (!/^1(3|4|5|7|8)\d{9}$/.test(this.phoneNumber)) { throw new Error('手机号码格式不正确'); } }
步骤 3
现在,我们已经定义了自定义数据验证规则,我们需要测试这个规则是否可以工作。
在我们的 index.js 文件中,我们可以添加以下代码来测试它的工作原理:
const user = await User.create({ email: 'test@test.com', password: '123456', phoneNumber: '13600000000' });
try { await user.validate(); } catch (error) { console.log(error.message); }
在上面的代码中,我们创建了一个 user 对象,并尝试对其进行验证。如果用户对象符合所有内置规则和自定义规则,则验证通过。否则,如果我们的自定义数据验证规则未通过,它将抛出一个错误,显示 "手机号码格式不正确"。
至此,我们已经成功地添加了自定义数据验证规则。
总结
在本篇文章中,我们了解了什么是数据验证规则,并添加了一个自定义数据验证规则。使用数据验证规则可以确保我们的数据有效性,并且有助于避免出现无效的数据,从而保证我们的系统的稳定性和健壮性。我们强烈建议您使用数据验证规则来保证您的数据正确性,这有助于您的项目保持良好的状态。
源代码示例 :
user.js
-- -------------------- ---- ------- ----- - ------ --------- - - --------------------- ----- ---- ------- ----- -- ----------- ------ - ----- ----------------- ---------- ------ ------- ----- --------- - -------- ---- - -- --------- - ----- ----------------- ---------- ----- -- ------------ - ----- ----------------- ---------- ------ --------- - ------------------- --------------- - -- ------------------------------------ - ----- --- ------------------- - - - - -- - ---------- ---------- ------ --- -------------- - -----
index.js
-- -------------------- ---- ------- ----- --------- - --------------------- ----- --------- - --- --------------------- ----------- ----------- - -------- -------- ----- ----------- --- ----- ---- - ------------------------------------- -- --------- --------------------------------- - ---------- - -- ----------------------------------------------- - ----- --- ------------------- - - ----- -------- ------ - --- - ----- ---- - ----- ------------- ------ ------------- --------- --------- ------------ ------------- --- ----------------- ------- ------------- -------------- ---------------------- - ----- ------- - ------------------ -------- ----- -------- ----- ------------------- - - -------
运行结果 :
sequelize_custom_validation_demo git:(main) ✗ node index.js User created successfully: test@t.com, 13600000000
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f70a84f6b2d6eab3f99c00