У приложения Express есть один API (маршрут), который принимает полную дату рождения и возвращает возраст, но вместо этого возвращает пустой объект - PullRequest
0 голосов
/ 16 июня 2019

Я получил маршрут / возраст, который принимает дату рождения в формате гггг-мм-дд и вернуть возраст человека как вывод

 app.get('/age', (req, res) => {

    getAge = (dob) => { 

     this.dob = req.query.dob;
     var today = new Date();
     var birthDate = new Date(dob);
     var age = today.getFullYear() - birthDate.getFullYear();
     var m = today.getMonth() - birthDate.getMonth();
     if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
          age--;
        }
     return age;

    }

    res.status(200).json({age: getAge})

});

Но почему-то я получаю пустую строку.

если ввод /age?dob=1994-03-10, то ответ должен быть

{"age":24}

1 Ответ

0 голосов
/ 16 июня 2019

Учитывая, что getAge на самом деле правильная функция, вам нужно CALL функция.

res.status(200).json({age: getAge()})

Вы должны изолировать функцию от маршрута, это означает, что каждый раз, когда кто-то попадает на маршрут age, создается функция. Кроме того, если вы берете dob в качестве параметра, вам не нужно получать dob из параметров.

const getAge = (dob) => {
    var today = new Date();
    var birthDate = new Date(dob);
    var age = today.getFullYear() - birthDate.getFullYear();
    var m = today.getMonth() - birthDate.getMonth();
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
        age--;
    }
    return age;
}

app.get('/age', (req, res) => {
    const dob = req.query.dob;
    res.status(200).json({age: getAge(dob)})
});

РЕДАКТИРОВАТЬ : Как вы сказали в комментариях, функция должна быть внутри маршрута, так что это также будет работать.

app.get('/age', (req, res) => {
    const dob = req.query.dob;
    const getAge = (dob) => {
        var today = new Date();
        var birthDate = new Date(dob);
        var age = today.getFullYear() - birthDate.getFullYear();
        var m = today.getMonth() - birthDate.getMonth();
        if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
            age--;
        }
        return age;
    }
    res.status(200).json({age: getAge(dob)})
});

В идеале подобные служебные функции должны идти к вашему utils.js (или какому-либо названию вашего утилитного модуля), чтобы другие модули могли его использовать.

РЕДАКТИРОВАТЬ 2: Из других ваших вопросов (включая удаленный) становится ясно, что ваша основная проблема не в понимании того, как работает Javascript в целом. Вы используете Node.js и Express, но вам не хватает основных строительных блоков. Я предлагаю вам прочитать некоторые учебные пособия по JS / Node.JS. Один из моих любимых ресурсов JS js.info , если хотите, порадуйте его. Также читайте об асинхронных операциях, включая обещания. Это очень поможет вам в долгосрочной перспективе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...