我在Node中创建了一个REST API,但是我遇到了问题。我正在尝试验证注册表单中的用户是否未将无效的年,月和日(如第13个月或第65天)置于无效状态。有效的年份它有效,但没有月或日工作,我不知道为什么。
以下是代码:
//Variables para verificar si es mayor a 18 a;os
var month = newUser.birthDate.getMonth() + 1;
console.log(month);
var year = newUser.birthDate.getFullYear();
var day = newUser.birthDate.getDate();
console.log(day);
var day_actual = new Date().getDate();
var month_actual = new Date().getMonth();
var year_actual = new Date().getFullYear();
var edad = year_actual - year;
if ((year > 1930) && (year <= year_actual) && (month > 0) && (month <= 12) && (day > 0) && (day <= 31)) {
if ((month == 2) && (day > 28)) {
res.status(406).send({ message: "Error, febrero solo tiene 28 dias" });
} else {
if (year > year_actual) {
res.status(500).send({ error: 'El año es mayor al año actual' });
} else {
if (month > month_actual) {
edad--;
} else if ((month_actual == month) && (day > day_actual)) {
edad--;
}
if (edad >= 18) {
createUser(newUser, function(err, user) {
if (err) throw err;
console.log(user);
res.status(200).send({ message: 'Se ha registrado' });
});
} else {
res.status(500).send({ error: 'EL usuario debe tener 18 anos' })
}
}
}
} else {
res.status(406).send({ message: "Año, mes o día inválido. Por favor introduzca un año entre 1930 y el año actual, mes entre 1 y 12, día entre 1 y 31" });
}
错误讯息:
TypeError:无法读取未定义的属性“getMonth”
答案 0 :(得分:1)
如果您输入month = 13
,可能会抛出异常,因为给定的格式在一个月内无效。因此,已经有一个图层可以验证您将哪些输入提供给对象(因为它是一个Date对象)。
如果出现异常,它将在某处处理,而对象通常会分配一个日期,现在根本不会分配并保留undefined
,从而导致错误"TypeError: Cannot read property 'getMonth' of undefined"
。
您的解决方案是捕获分配birthDate
时引发的任何异常,或者只是假设undefined
的{{1}}值表示用户传递了无效数据。