Чтобы попрактиковаться в моем узле, я пытаюсь сделать загрузчик файлов. Цель состоит в том, чтобы получить URL-адрес файла из базы данных (в настоящее время mp3), загрузить его в проект и использовать в качестве href на стороне клиента.
Мне удалось заставить обещания работать и загрузить файл, однако файл говорит, что он пуст, но когда я захожу в проект, я могу нормально открыть файл (mp3).
Вот что у меня есть до сих пор:
.then(() => {
Promise.resolve()
.then(() => {
return new Promise(resolve => {
console.info("Started download");
// req.body.total_source is the full url of the file
console.info(req.body.total_source);
setTimeout(() => {
download(req.body.total_source, "dist").then(() => {
console.info("downloaded!");
resolve();
});
}, 1000);
});
})
.then(() => {
console.info("success page rendered");
res.render("success", {
// only get file name from url
song_link: req.body.total_source.substring(
req.body.total_source.lastIndexOf("/") + 1,
req.body.total_source.length
),
song_source: req.body.total_source,
name: req.body.name
});
});
})
И кнопка настроена как (с использованием ejs):
<a href = "/dist/<%= song_link %>" download>Download <%= name %></a>
Может кто-то указать мне верное направление? Все console.infos показывают, что загрузка завершена до отображения страницы успеха, поэтому я не уверен, почему он говорит «Ошибка - пустой файл».



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


ИСПРАВЛЕНО: я думаю, что проблема заключалась в том, что я сохранял файл в папку dist, когда я настроил проект для использования клиентских активов из «общедоступной» папки. Сохранение файлов в "/public/assets" устранило проблему:
download(req.body.total_source, "public/assets");