Пожалуйста, рассмотрите этот кусок кода:
var cmd = `cd "${dir}" && curl -L "${url}" | tar -xJvf - | zip -qr archive.zip -@`;
await exec(cmd);
res.sendFile(path.join(dir, "archive.zip"));
Он загружает .tar.xz, распаковывает его, распаковывает и, наконец, отправляет пользователю.
Если я запустил его, произойдет сбой при res.sendFile(...)
, сообщив, что файл не существует. Однако, если я загляну в свою файловую систему, zip на самом деле там.
Поэтому я попытался добавить небольшую задержку перед res.sendFile(...)
, например:
var cmd = `cd "${dir}" && curl -L "${url}" | tar -xJvf - | zip -qr archive.zip -@`;
await exec(cmd);
setTimeout(()=>{
res.contentType(path.join(dir, "archive.zip"));
res.sendFile(path.join(dir, "archive.zip"));
}, 1000);
... и это волшебным образом сработало.
Кажется, что exec(cmd)
на самом деле не ожидает завершения команды. Это из-за того, что по трубопроводу?