如何使用 sequelize 验证节点应用程序中的业务规则?
how to validate business rules in node application with sequelize?
我有一个使用 sequelize orm 的 express/node js 应用程序。我想知道在应用程序中什么是编写业务规则验证的最佳位置。假设我有一个用户模型 class 如下。我在 class(下面以粗体显示)中添加了一些模型验证,例如名称不能为空。除了模型验证之外,我可以在哪里添加一些业务规则验证,比如如果年龄小于 18 岁或 16 岁,则不能有 employerName 或 hoursWorkedPerWeek(这仅适用于此示例)。例子是为这个问题设计的。
有没有办法将此类规则添加到模型 class,如果现在如何将其添加到下面的控制器 class。
用户模型class
const User = sequelize.define(
'User',
{
id: {
type: DataTypes.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
Name: {
type: DataTypes.STRING,
allowNull: false,
**validate: {
notEmpty: true
}**
},
age: {
},
hoursWorkedPerWeek: {
},
employerName: {
},
createdAt: {
},
updatedAt: {
}
}
....
);
控制器class
static async add(user) {
try {
models.User.create(user).then(newUser => {
//do something
}).catch(error => {
throw error;
});
} catch (error) {
throw error;
}
}
在文档中,您似乎可以在模型定义中传递验证规则:https://sequelize.org/master/manual/validations-and-constraints.html#per-attribute-validations。请注意您可以在最后执行的自定义验证程序。
如果您正在进行大量验证,将其放在一个文件中并在整个项目中根据需要引用可能会有所帮助。
编辑:更新以显示示例。提醒一下,我还没有实现这个,但是从文档来看,这似乎是遵循的。
// validations.js
exports.ageValidator = value => {
if(value < 18) {
throw new Error("Invalid age.");
}
}
// list other validators as needed here in the same manner
然后您可以将其导入模型所在的 class 并添加到验证块中。
// within your User model
const validateModule = require(/* path to validations.js */);
const ageValidator = validateModule.ageValidator;
/*
Add ageValidator to the `validate` section
age:{
validate: {
customValidate(value) {
ageValidator(value);
}
}
}
我有一个使用 sequelize orm 的 express/node js 应用程序。我想知道在应用程序中什么是编写业务规则验证的最佳位置。假设我有一个用户模型 class 如下。我在 class(下面以粗体显示)中添加了一些模型验证,例如名称不能为空。除了模型验证之外,我可以在哪里添加一些业务规则验证,比如如果年龄小于 18 岁或 16 岁,则不能有 employerName 或 hoursWorkedPerWeek(这仅适用于此示例)。例子是为这个问题设计的。
有没有办法将此类规则添加到模型 class,如果现在如何将其添加到下面的控制器 class。
用户模型class
const User = sequelize.define(
'User',
{
id: {
type: DataTypes.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
Name: {
type: DataTypes.STRING,
allowNull: false,
**validate: {
notEmpty: true
}**
},
age: {
},
hoursWorkedPerWeek: {
},
employerName: {
},
createdAt: {
},
updatedAt: {
}
}
....
);
控制器class
static async add(user) {
try {
models.User.create(user).then(newUser => {
//do something
}).catch(error => {
throw error;
});
} catch (error) {
throw error;
}
}
在文档中,您似乎可以在模型定义中传递验证规则:https://sequelize.org/master/manual/validations-and-constraints.html#per-attribute-validations。请注意您可以在最后执行的自定义验证程序。
如果您正在进行大量验证,将其放在一个文件中并在整个项目中根据需要引用可能会有所帮助。
编辑:更新以显示示例。提醒一下,我还没有实现这个,但是从文档来看,这似乎是遵循的。
// validations.js
exports.ageValidator = value => {
if(value < 18) {
throw new Error("Invalid age.");
}
}
// list other validators as needed here in the same manner
然后您可以将其导入模型所在的 class 并添加到验证块中。
// within your User model
const validateModule = require(/* path to validations.js */);
const ageValidator = validateModule.ageValidator;
/*
Add ageValidator to the `validate` section
age:{
validate: {
customValidate(value) {
ageValidator(value);
}
}
}