Прочтите тело обещания о получении
Я уверен, что у этого есть простой ответ, но для жизни я не могу понять, как это сделать.
У меня есть следующая экспресс-конечная точка для загрузки в хранилище Google Cloud. Он отлично работает, и ответ от google api дает мне уникальное имя файла, которое я хочу передать обратно в свой интерфейс:
app.post('/upload', (req, res) => {
var form = new formidable.IncomingForm(),
files = [],
fields = [];
form
.on('field', function(field, value) {
fields.push([field, value]);
})
.on('file', function(field, file) {
files.push([field, file]);
})
.on('end', function() {
console.log('-> upload done');
});
form.parse(req, function(err, fields, files){
var filePath = files.file.path;
bucket.upload(filePath, function(err, file, apiResponse){
if (!err){
res.writeHead(200, {'content-type': 'text/plain'});
res.end("Unique File Name:" + file.name);
}else{
res.writeHead(500);
res.end();
}
});
});
return;
});
Я добираюсь до этой конечной точки, вызывая короткую функцию, которая передает файл ей:
function upload(file) {
var data = new FormData();
data.append('file', file);
return fetch('upload',{
method: 'POST',
body: data
});
}
const Client = { upload };
export default Client;
Эта функция вызывается из моего интерфейса следующим образом:
Client.upload(this.file).then((data) => {
console.log(data);
});
Этот final console.log(data)
регистрирует ответ на консоль. Тем не менее, я не вижу в любом случае ответа, который я написал ("Unique File Name:" + file.name
)
У кого-нибудь есть предложения по тому, как я могу получить эту информацию из тела ответа на стороне клиента?
РЕДАКТИРОВАТЬ:
data
выглядят так, когда я console.log:
EDIT 2:
Это ответ, который я получаю, когда я отправляю файл в свою конечную точку, используя Postman:
Ответы
Ответ 1
Обратите внимание, что вы имеете дело с объектом Response. Вам нужно в основном прочитать поток ответов с Response.json()
или Response.text()
(или с помощью других методов), чтобы просмотреть ваши данные. В противном случае тело ответа всегда будет отображаться как заблокированный читаемый поток. Например:
fetch('https://api.ipify.org?format=json')
.then(response=>response.json())
.then(data=>{ console.log(data); })
Если это дает неожиданные результаты, вы можете проверить свой ответ с помощью Postman.
Ответ 2
@GabeRogan дал мне ответ (и у меня была опечатка, как и ожидалось)
Здесь мой обновленный код для переднего конца, который возвращает текст основного ответа:
Client.upload(this.file).then(response => response.text())
.then((body) => {
console.log(body);
});
body
- строка, которая гласит: "Уникальное имя файла: [FILE-NAME]"
РЕДАКТИРОВАТЬ:
Вот хорошее объяснение API-интерфейса Fetch и чтение ответа, полученного с объекта обещания: https://css-tricks.com/using-fetch/