1

プロジェクトの 1 つを、requestもう少し軽量なもの (got、axios、または fetch など) に切り替えています。すべて順調に進んでいますが、ファイル ストリーム (PUTおよびPOST) をアップロードしようとすると問題が発生します。request パッケージでは問題なく動作しますが、他の 3 つのパッケージはいずれもサーバーから 500 を返します。

500 は通常、サーバー側の問題を意味することを知っていますが、これは私がテストしている HTTP パッケージとのみ一致します。コードを use に戻すと、request正常に動作します。

ここに私の現在のリクエストコードがあります:

Request.put(`http://endpoint.com`, {
  headers: {
    Authorization: `Bearer ${account.token.access_token}`
  },
  formData: {
    content: fs.createReadStream(localPath)
  }
}, (err, response, body) => {
  if (err) {
    return callback(err);
  }

  return callback(null, body);
});

そして、これは別のパッケージを使用した試みの1つです(この場合は取得しました):

got.put(`http://endpoint.com`, {
  headers: {
    'Content-Type': 'multipart/form-data',
    Authorization: `Bearer ${account.token.access_token}`,
  },
  body: {
    content: fs.createReadStream(localPath)
  }
})
  .then(response => {
    return callback(null, response.body);
  })
  .catch(err => {
    return callback(err);
  });

入手したドキュメントform-dataに従って、その例に従ってパッケージを組み合わせて使用​​しようとしましたが、それでも同じ問題が発生します。

私が収集できるこれら2つの唯一の違いは、ヘッダーgotを手動で指定する必要があることです。そうしないと、エンドポイントで適切なエラーが発生します。Content-Typeそれ以外の場合、2 つのパッケージがストリームを使用して本体を構築する方法がわかりませんが、前述したようfetchaxiosgot.

を使用したスニペットが必要な場合は、fetch喜んaxiosで投稿します。

4

3 に答える 3

2

これはヘッダーの問題だったようです。からヘッダーを直接使用しFormData(つまり)、headers: form.getHeaders()後で追加のヘッダーを追加するだけで ( Authorization)、これは問題なく動作します。

于 2016-06-25T00:52:13.807 に答える