Мое приложение состоит из страницы указателя с формой.
Когда пользователь отправляет форму, app.post()
берет данные формы и передает их в функцию обработки больших данных.
Эта функция наверняка требует времени.
Проблема в том, что сообщение происходит, а res.render()
не происходит, и Heroku считает, что истекло время ожидания, и выдает ошибку времени ожидания (code=H12
).
В частности:
2018-09-07T17:47:27.555737+00:00 heroku[router]: at=error code=H12 desc="Request
timeout" method=POST path="/sc" request_id=21e8b890-4072-426e-bac3-91c3646a0301 fwd="130.43.124.255" dyno=web.1 connect=0ms service=30001ms status=503 bytes=0 protocol=http
Я мог бы решить это, выполнив res.render()
на app.post()
. К сожалению, это невозможно.
Причина в том, что после того, как функция отнимает много времени, я отправляю пользователю некоторые данные для загрузки в виде .txt
файла.
Это код, который делает это:
var fileContents = Buffer.from(result, 'ascii');
var readStream = new stream.PassThrough();
readStream.end(fileContents);
res.set('Content-disposition', 'attachment; filename=' + fileName);
res.set('Content-Type', 'text/plain');
readStream.pipe(res);
Поскольку я использую res.set()
, невозможно отправить файл и сделать res.render()
.
Но до того, как этот кусок кода, который я только что опубликовал, выполняется, запрос остается без ответа долгое время, и Heroku считает, что это тайм-аут.
Итак, что можно сделать для уменьшения ошибки тайм-аута H12
?
Возможно, есть возможность полностью отключить или установить очень большой тайм-аут?