javascript - Sequelize 年龄验证(从出生日期开始)

标签 javascript validation date sequelize.js

我希望我的用户在注册时年满 8 岁。
我按照该示例创建了自己的验证器:http://docs.sequelizejs.com/manual/models-definition.html#validations
这里是:

// In a model file 

module.exports = (sequelize, Sequelize) => {
  return sequelize.define('Utilisateur', {
    // ...
    DateNaissance: {
      type: Sequelize.DATEONLY,
      validate: {
        isOldEnough(value) {
          let ageCheck = new Date(Date.now());
          ageCheck.setFullYear(ageCheck.getFullYear-8);
          if (ageCheck < value) {
            throw new Error('Too young');
          }
        }
      }
    }
  }, {
      timestamps: false
    });
}

问题是,当我尝试注册该用户时,它可以正常工作,而它不应该:
{
    "email": "test@test.com",
    "password": "12345678",
    "prenom": "prenomTest",
    "nom": "nomTest",
    "dateNaissance": "2018-03-03", // <<--
    "nomVillage": "villageTest",
    "NPA": "9999",
    "noRue": 42,
    "nomRue": "Chemin du test"
}

我还想知道是否真的可以使用 Sequelize 模型来完成,因为模型定义将只完成一次?!也许我必须在触发器中进行此检查?

最佳答案

我终于可以用 做到了 Hook (创建前):

// ...
DateNaissance: {
      type: Sequelize.DATEONLY,
      validation: {
        isDate: true,
      }
    }
  }, {
      timestamps: false,
      hooks: {
        beforeCreate: function (user, options) {

          let ageCheck = new Date();
          ageCheck.setFullYear(ageCheck.getFullYear() - 8);
          let birthDate = new Date(user.DateNaissance);
          if (ageCheck < birthDate) {
            throw new Error('Too young');
          }
        }
      }
    });
}

hooks doc

关于javascript - Sequelize 年龄验证(从出生日期开始),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55703356/

相关文章:

r - 分割数据和生成季节性箱线图的最优雅方法是什么?

javascript - 将人类可读的数字范围转换为正则表达式

javascript - 如何将测试用例组织成大型应用程序的测试套件

java - 根据输入值更改Java Validator的@Pattern Regex

c# - 允许为标有 PhoneAttribute 或 UrlAttribute 的字段使用空字符串

javascript - Extjs 自定义 vtype

r - 按 R 中的日期序列和 id 变量聚合

java - 如何将字符串转换为日期并保持格式正确

javascript - 使用 React 和 Redux Hooks,为什么我的操作没有触发?

php - 在标签存储在数据库中的网站(如 Facebook)上进行图像标记