Учитывая, что 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 , если хотите, порадуйте его. Также читайте об асинхронных операциях, включая обещания. Это очень поможет вам в долгосрочной перспективе.