Node.js

Node.js に fetch がやってきた

Node.js で fetch が使えるようになる

ブラウザで実行される JavaScript とサーバーサイドで実行される Node.js では提供される API に違いがあります。

例えば DOM を操作する目的で使用する Document.querySelector() は Node.js に存在しないですし、反対にファイルを操作する目的で使用される fs モジュールはブラウザには存在しない API です。

リソースを取得するためのリクエストを実施する Fetch API も同様にブラウザにのみ存在する API でした。

Document.querySelector() のようなそもそも DOM の存在しないサーバーの API として提供されていないのわかりやすいですが、いかにも普遍的に使用できそうな Fetch() が Node.js の API に存在しないというのは初心者にとってはわかりづらく(確かに fetch() はブラウザの提供する API ではなく JavaScript 自体に内包されているグローバル関数に思えてもおかしくはない)stack overflow でも Node.js に fetch() が存在しないという質問が多くの票を集めています。

ReferenceError: fetch is not defined

実用面で見ても現在の実行環境がブラウザかサーバーかを気にせずに実行できる HTTP クライアントが存在していないため axios などのサードパーティライブラリをブラウザとサーバーで共通で使用したり、node-fetch などのライブラリを利用して Node.js 上で fetch() を利用できるようにする必要がありました。

そのような状況の中、ついに Node.js の標準ライブラリとして Fetch API が取り込まることとなりました。内部的には undici.fetch が使用されており WHATWG fetch と互換性があります。

fetch() の使いかた

Fetch API を利用するには Node.js のバージョンが 17.5.0 以上であることが必要です。現時点(2022/2/07)ではまだリリースされてないのでまだ使えません🤷‍♂️。

また互換性を保つために Fetch API を利用するには --experimental-fetch フラグを付与して実行する必要があります。

node fetch.js --experimental-fetch

Node.js v18 移行では --experimental-fetch を付与せずに Fetch API が使用できるようになります。

基本的な使用方法はブラウザの Fetch API と同様に使えます。

const fetchUsers = async () => {
  const response = await fetch('https://jsonplaceholder.typicode.com/users');
  const data = await response.json();
  return data;
}
 
fetchUsers().then(data => console.log(data));

fetch() と同じく以下のインターフェイスも Node.js で利用できるようになります。

終わりに

「ついに Node.js でも fetch() が使えるようになったんだ!これでいつでもどこでも fetch() が使えるね!」

banzai kids boy1

スクリーンショット 2022-02-06 20.25.49


Contributors

> GitHub で修正を提案する
この記事をシェアする
はてなブックマークに追加

関連記事