javascript - 如何使用 sequelize 验证 Node 应用程序中的业务规则?

标签 javascript node.js sequelize.js

我有一个使用 sequelize orm 的 express/node js 应用程序。我想知道应用程序中编写业务规则验证的最佳位置。说我有一个用户模型类,如下所示。我在类中添加了一些模型验证(下面以粗体显示),例如 Name 不能为空。除了模型验证之外,我可以在哪里添加一些业务规则验证,例如如果年龄小于 18 或 16 岁,则不能有雇主名称或 hoursWorkedPerWeek(这仅用于此示例)。为这个问题设计了一个例子。
有没有办法将这样的规则添加到模型类中,如果现在我如何将它添加到下面的 Controller 类中。
用户模型类

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: {
    
    }
  }
  ....
);
Controller 类
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
然后,您可以将其导入模型所在的类并添加到验证块中。
// 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);
            }
        }
    }


关于javascript - 如何使用 sequelize 验证 Node 应用程序中的业务规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65850878/

相关文章:

javascript - 为什么关键字 this 与静态方法一起使用?

javascript - 用 Jade 插入包含指令?

javascript - 使用 fetch 或 axios 发送身份验证 header

mysql - 使用 Sequelize 一次将数据创建到三个表

Javascript:如何制作仅在特定日期和时间触发的事件?

php - 渲染 Highcharts 的问题 - 通过 PHP/MySQL 填充

javascript - 面临错误 core.js :15723 ERROR TypeError: Cannot read property 'toLowerCase' of undefined In Angular 7

javascript - 拆分后数组中存在制表符

mysql - 按计数关联排序?

javascript - 如何在express.js中访问函数外的mysql记录