1. ホーム
  2. node.js

[解決済み】nodejs http.getレスポンスのbodyはどこですか?

2022-04-09 16:31:48

質問

のドキュメントを読んでいるところです。 http://nodejs.org/docs/v0.4.0/api/http.html#http.request しかし、何らかの理由で、返された終了した応答オブジェクトの body/data 属性を実際に見つけることができないようです。

> var res = http.get({host:'www.somesite.com', path:'/'})

> res.finished
true

> res._hasBody
true

終了している(http.getがやってくれる)ので、何らかのコンテンツがあるはずです。でも、本文もデータもないし、読み取ることもできない。ボディはどこに隠れているのでしょうか?

解決方法は?

編集:6年後の自分への返信

待つ キーワード は、HTTP リクエストからレスポンスを取得するための最良の方法であり、コールバックや .then()

また、プロミスを返すHTTPクライアントを使用する必要があります。 http.get() はまだRequestオブジェクトを返すので、うまくいきません。

  • fetch は低レベルのクライアントで、npm と nodeJS 17 以降の両方から利用できます。
  • superagent は成熟した HTTP クライアントで、よりシンプルなクエリ文字列エンコーディング、適切な MIME タイプの使用、デフォルトでの JSON、およびその他の一般的な HTTP クライアント機能を含む、より合理的なデフォルトを特徴としています。
  • axios もかなり人気があり superagent

await は、Promise が値を持つまで待ちます - この場合、HTTP レスポンスです!

const superagent = require('superagent');

(async function(){
  const response = await superagent.get('https://www.google.com')
  console.log(response.text)
})();

await を使って、制御する は単に次の行に渡します。 によって返されたプロミスが superagent.get() が値を持っていることを示します。