zipFiles()
является асинхронным. Это означает, что он не блокируется и заканчивается через некоторое время. Итак, в процессе обработки вашего запроса вы звоните
res.render("zipping")
до окончания zipFiles()
. И, res.render()
отправит ответ и закроет выходной поток.
Если вы хотите подождать, чтобы позвонить res.render()
, пока не закончите вызов zipFiles()
, то вам нужно либо позвонить изнутри zipFiles()
, когда все будет сделано, либо добавить обратный вызов к zipFiles()
чтобы он мог общаться, когда закончил.
Кроме того, есть ли причина, по которой вы не можете установить req.session.zipFile = "/download?file=" + zipFile;
до того, как позвоните res.render()
?
Кроме того, в зависимости от того, как настроен ваш сеанс (для которого вы не показываете нам код), просто сделайте это:
req.session.zipFile = "/download?file=" + zipFile;
может быть недостаточно для фактического сохранения этого значения в сеансе. Возможно, вам также придется позвонить .save()
во время сеанса.
И вы устанавливаете:
req.session.zipFile
в конце процесса архивирования, поэтому любые запросы, поступающие из этого сеанса до его завершения, также не увидят, что эта переменная сеанса также установлена (для меня это проблема параллелизма).