Ошибка тайм-аута H12 на Heroku и способы ее устранения - PullRequest
0 голосов
/ 08 сентября 2018

Мое приложение состоит из страницы указателя с формой.

Когда пользователь отправляет форму, 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? Возможно, есть возможность полностью отключить или установить очень большой тайм-аут?

...