当たり前すぎるのか、探し方が悪いのか、サンプルが見当たらなかったので、メモとして。
HTTP GET 等で取得したコンテンツを、他の URL に POST する際に、ローカルでファイル化しない方法がないか探してました。
で、行きついたのが下記のコード。
node-fetch を使っています。
const fetch = require('node-fetch'); fetch(`${GET_URL}`, { method: 'GET', /* Headers 等、その他のパラメータ */ }).then(response => { return fetch(`${POST_URL}`, { method: 'POST', body: response.body, /* Headers 等、その他の(ry */ }); });
# async/await よりも Promise 派
最初の fetch で取得した response の body が、readable stream になっているはずなので、そのまま次の fetch のリクエスト body に設定しているだけです。
何に使うの?
LINE bot で、投稿された画像を他所の Web API を使って処理させたくなりまして。
一応、その Web API には、画像の URL を渡せすことも可能なのですが、LINE Bot の場合、コンテンツにアクセスする場合には、Authorization ヘッダーにアクセストークンを指定する必要があるので、その Web API に URL を渡しても、Web API 側から画像を取得することが無理ってことに。
そんな訳で、コンテンツを代わりに取ってきて、Web API に POST してあげないといけなかったのですが、ローカルに保存するのがちゅうちょする環境だったので、結局、上のコードのように、ストリームをそのまま渡す、というやり方に落ち着いた次第でして。