我希望我的用户在注册时年满 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/