Здравствуйте, я создаю простой API, используя ytdl с express, рассматриваемый маршрут загружает файл
app.post('/audio', (req, res) => {
console.log(`Downloading audio from ${req.body.url}`);
downloadAudio(req.body.url)
.then(i => res.send())
.catch(e => console.log(e));
// setTimeout(() => {
// res.send();
// }, 3000);
// console.log('Audio');
// console.log(req.body.url, ' - ', req.body.format);
});
Это функция загрузки аудио
const downloadAudio = url => {
return new Promise((resolve, reject) => {
ytdl.getInfo(url)
.then(({ title }) => {
const stream = ytdl(url);
const proc = new ffmpeg({ source: stream });
proc.save(`./public/downloads/${title}.mp3`);
resolve();
console.log(title);
})
.catch(error => {
console.log('Custom error');
reject(error);
});
});
};
проблема возникает из этой выборки
// 'http://localhost:5000/audio' is the first fetch argument
fetch(`${API_URL}/${format}`, {
method: 'POST',
body: jsonVideo,
header: {
'content-type': 'application/json',
},
})
.then(res => {
$button.textContent = 'Download';
$button.removeAttribute('disabled');
console.log('Done', res);
})
.catch(e => console.log(e));
После получения ответа страница просто перезагружается после выполнения того, что находится внутри then ()
На маршруте выше, если я использую setTimeout для тестирования, он ждет 3 секунд затем отправляет ответ, и программа работает, как и ожидалось, без обновления страницы, но если я использую обещания, она показывает ответ в devtools на секунду, но перезагружает страницу
Имейте в виду, у меня e.preventDefault()
в первой строке прослушиватель событий, в который включена эта выборка.
https://github.com/jbordalo/youtube-dloader
Спасибо
Редактировать
app.post('/audio', (req, res) => {
console.log('/AUDIO');
console.log(`Downloading audio from ${req.body.url}`);
res.send({ message: 'doing it' });
// downloadAudio(req.body.url, (error, result) => {
// if (error) {
// console.log(error);
// } else {
// console.log(result);
// res.send({ message: result });
// }
// });
});
Это работает, но если я раскомментирую downloadAudio и удаляю первую отправку, она снова начинает обновляться после ответ приходит на консоль (devtools)