Fetch Promiseの本体を読む 質問する

Fetch Promiseの本体を読む 質問する

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

クライアント側の応答本文からこの情報を取得するにはどうすればよいでしょうか?

dataconsole.log に記録すると次のようになります。

データ console.log のスクリーンショット

これは、Postman を使用してエンドポイントにファイルを POST したときに返される応答です。

Postman を使用した応答のスクリーンショット

ベストアンサー1

あなたが扱っているのはレスポンスオブジェクト基本的には読むResponse.json()データを表示するには、または(または他の方法)を使用して応答ストリームResponse.text()をオープンする必要があります。そうしないと、応答本体は常にロックされた読み取り可能なストリームとして表示されます。例:

fetch('https://api.ipify.org?format=json')
.then(response=>response.json())
.then(data=>{ console.log(data); })

予期しない結果になった場合は、次の方法で応答を検査してください。郵便配達員

おすすめ記事