TypeError:无法读取undefined的属性'getMonth'

时间:2018-01-09 15:25:20

标签: javascript validation

我在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”

1 个答案:

答案 0 :(得分:1)

如果您输入month = 13,可能会抛出异常,因为给定的格式在一个月内无效。因此,已经有一个图层可以验证您将哪些输入提供给对象(因为它是一个Date对象)。

如果出现异常,它将在某处处理,而对象通常会分配一个日期,现在根本不会分配并保留undefined,从而导致错误"TypeError: Cannot read property 'getMonth' of undefined"

您的解决方案是捕获分配birthDate时引发的任何异常,或者只是假设undefined的{​​{1}}值表示用户传递了无效数据。