Я строю сервер и хочу разрешить загрузку файлов.
FrontEnd с угловым - и у меня там службы БД.
BackEnd с NodeJS + экспресс.
У меня есть маршрутизатор и контроллер BE, и я написал код, который работает, но не для всех случаев.
Если я наберу в браузере URL для загрузки, скажем "http://localhost:3000/api/files/download/somefile"
Все работает как положено, и файл загружается на мой компьютер.
но если я установил функцию в своем FE для вызова этой функции загрузки (скажем, после нажатия какой-либо кнопки) - она не работает, и я получаю сообщение об ошибке: «Ошибка Http во время анализа для http://localhost:3000/api/files/download/some%20file"
Мои заголовки сервера, как я написал в app.js:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
res.setHeader(
"Access-Control-Allow-Methods",
"GET, PUT, POST, PATCH, DELETE, OPTIONS"
);
next();
});
моя функция на контроллере:
exports.downloadFile = (req, res, next) => {
var data = req.params.file;
fs.writeFile("temp.txt", data, (err) => {
if (err){
console.log("error: "+err);
}
console.log("Successfully Written to File!");
var filePath = "temp.txt";
var fileName = "downloaded_file.txt";
res.download(filePath, fileName, (err) => {
console.log("download error: "+err)
});
});
мой звонок в БД Сервис:
downloadExp(file: string) {
this.http.get("http://localhost:3000/api/files/download" + file)
}
Что я делаю не так? как я могу разрешить загрузку из внешнего интерфейса после нажатия кнопки?