Google Cloud ストレージにアップロードするための次の Express エンドポイントがあります。これはうまく機能し、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 に記録すると次のようになります。
これは、Postman を使用してエンドポイントにファイルを POST したときに返される応答です。
ベストアンサー1
あなたが扱っているのはレスポンスオブジェクト基本的には読むResponse.json()
データを表示するには、または(または他の方法)を使用して応答ストリームResponse.text()
をオープンする必要があります。そうしないと、応答本体は常にロックされた読み取り可能なストリームとして表示されます。例:
fetch('https://api.ipify.org?format=json')
.then(response=>response.json())
.then(data=>{ console.log(data); })
予期しない結果になった場合は、次の方法で応答を検査してください。郵便配達員。