Я использую express.js для генерации некоторого маршрута для частного проекта.Этот конкретный маршрут занимает очень много времени (около 3 минут).Поскольку это проект только для меня, я действительно не против ждать.
Вот мой маршрут:
router.get('/', (req, res) => {
req.setTimeout(0);
console.log('Start ' + new Date());
let data = [];
//... very large code that fetch a lots of data and update the data variable
res.json(data);
console.log('End ' + new Date());
});
Если я выполняю запрос непосредственно в URL браузера,загрузка страницы занимает много времени, но через некоторое время результат будет отображаться правильно.
Но если я использую axios, чтобы сделать запрос ajax, например,
axios({
method: 'get',
url: `/api/simulation?idSession=${this.props.match.params.session}`,
timeout: 600000,
}).then(result => {
this.setState({
simulation: {
loading: false,
data: result.data
}
}).catch(err => alert(err));
});
Iполучит первый файл console.log со словом «Пуск» и датой, и примерно через 2 минуты (более или менее через несколько миллисекунд) я снова получу «Start. console.log» и снова.
Я буду получать журнал консоли «Пуск» в цикле, пока не перезапущу сервер узлов или не закрою страницу браузера с помощью запроса ajax.
Я все равно увижу «End» console.log после этого, но axios, кажется, игнорирует это.
Хотя я добавил это, добавив req.setTimeout (0);на моем маршруте это могло бы решить проблему, но, похоже, это ничего не меняет.
И поскольку проблема возникает только тогда, когда я вызываю маршрут через запрос ajax с axios, я попытался поставить большойтайм-аут, но это тоже ничего не дало.
На всякий случай, моя версия nodejs - 8.11.2, экспресс-версия - 4.16.3, а axios - 0.18.0
У кого-то есть другая идея,или способ отключить все таймауты?
Спасибо