Я использую Angular 6 и Nodejs/Expressjs, чтобы избежать междоменных проблем. Итак, вот мой код
В Angular я звоню:
this.httpClient.post('/uploadFile', formData, {params: params})
.pipe(map((res: any) => {return res}),
catchError((error: HttpErrorResponse) => {})
Nodejs/Expressjs:
app.post('/uploadFile', (req, res) => {
let formData
const form = new IncomingForm();
let readStream;
form.on('file', (field, file) => {
console.info('file.path>>>',file.path);
readStream = fs.createReadStream(file.path);
});
form.on ('fileBegin', function(name, file) {
//rename the incoming file to the file's name
let fileName = file.path.split("\\");
fileName[fileName.length-1] = file.name.split('.')[0];
fileName = fileName.join("\\");
file.path = fileName;
console.info('file.path', file.path);
console.info('file.name', file.name);
})
form.parse(req, function (err, fields, files) {
formData = new FormData();
formData.append("file", readStream);
formData.append('package_name', req.query.packagename);
formData.append('type', req.query.type);
formData.append('version', req.query.version);
formData.append('descr', req.query.descr);
console.info('req.query.packagename',req.query.packagename);
const axiosConfig = {
headers: {
'Content-Type': 'multipart/form-data'
}
};
let uploadRequest = request.post("WebAPiCallURL", requestCallback);
uploadRequest._form = formData;
uploadRequest.setHeader('Content-Type', 'multipart/form-data');
function requestCallback(err, res, body) {
return JSON.parse(body);
}
});
});
Из requestCallback я не могу отправить ответ на Angular6
Дело не в корсе. я могу получить доступ к другим данным вызовов API в angular. Но только для этого конкретного случая, когда я делаю вызов веб-API из nodejs для загрузки файла, я получаю ответ, но не могу отправить его обратно в angular.
Где находится res.send в вашем вызове API?
Если я это сделаю, я получаю сообщение об ошибке, потому что оно берет ссылку res из функции обратного вызова.





Вы не отправляете ответ клиенту. Для отправки вы можете использовать res.send или любой из функция отклика из Expressjs.
function requestCallback(err, response, body) { //Rename res to response to avoid conflict
res.send(body); // Send Response to Client
}
Примечание : Поскольку вы использовали ту же переменную res для запроса, переименуйте ее в другое имя.
Дубликат Как разрешить CORS?