JavaScript / Node.js で "ReferenceError: fetch is not defined" エラーが発生した場合の解決策

2024-04-02

ブラウザまたは Node.js でコードを実行すると、ReferenceError: fetch is not defined というエラーが発生する。

原因

fetch はブラウザの API であり、Node.js 標準環境では利用できません。Node.js で fetch を使用するには、node-fetch などのライブラリをインストールする必要があります。

解決策

以下のいずれかの方法で解決できます。

ブラウザの場合

  • コード内に fetch ポリフィルを追加する。
  • CDN から fetch を読み込む。

Node.js の場合

  • node-fetch ライブラリをインストールする。

詳細

ブラウザでは、fetch は標準の API として提供されています。そのため、特別な設定なしでコード内で fetch を使用できます。

しかし、古いブラウザでは fetch がサポートされていない場合があります。その場合は、コード内に fetch ポリフィルを追加する必要があります。

ポリフィルは、古いブラウザで fetch を動作させるための JavaScript コードです。いくつかのポリフィルが公開されていますが、人気のあるものは次のとおりです:

これらのポリフィルは、CDN から読み込むこともできます。

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/fetch.umd.min.js"></script>
npm install node-fetch

ライブラリのインストール後、コード内で fetch を使用できます。

const fetch = require('node-fetch');

fetch('https://example.com/')
  .then(response => response.text())
  .then(text => console.log(text));



ブラウザ

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Fetch API サンプル</title>
</head>
<body>
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/fetch.umd.min.js"></script>

  <script>
    fetch('https://example.com/')
      .then(response => response.text())
      .then(text => console.log(text));
  </script>
</body>
</html>

Node.js

const fetch = require('node-fetch');

fetch('https://example.com/')
  .then(response => response.text())
  .then(text => console.log(text));



fetch を使用しない代替方法

XMLHttpRequest は、ブラウザで古くから使用されている API です。fetch よりも汎用性があり、複雑なリクエストにも対応できます。

const xhr = new XMLHttpRequest();

xhr.open('GET', 'https://example.com/');

xhr.onload = function() {
  if (xhr.status === 200) {
    console.log(xhr.responseText);
  } else {
    console.error(xhr.statusText);
  }
};

xhr.send();

jQuery は、JavaScript のライブラリです。ajax メソッドを使用して、簡単に HTTP リクエストを実行できます。

$.ajax({
  url: 'https://example.com/',
  success: function(data) {
    console.log(data);
  },
  error: function(error) {
    console.error(error);
  }
});

Axios は、HTTP リクエストを行うための JavaScript ライブラリです。fetch よりも使いやすく、多くの機能が備えています。

axios.get('https://example.com/')
  .then(response => console.log(response.data))
  .catch(error => console.error(error));

node-request は、Node.js で HTTP リクエストを行うためのライブラリです。fetch よりも多くの機能が備えられています。

const request = require('request');

request('https://example.com/', (error, response, body) => {
  if (error) {
    console.error(error);
  } else {
    console.log(body);
  }
});

上記以外にも、さまざまな方法があります。


javascript node.js


2024年最新!JavaScriptタイムピッカー徹底解説

この解説では、JavaScript、jQuery、およびtimeに関連する「What's a Good Javascript Time Picker?」というプログラミングについて、以下の内容を分かりやすく日本語で解説します。タイムピッカーは、ユーザーが時間を選択するための視覚的なインターフェースです。通常、テキストフィールドをクリックすると、時間リストまたはカレンダーが表示され、ユーザーは希望する時間を選択できます。...


jQuery vs JavaScript: 入力がフォーカスされているかどうかをテストする方法

このチュートリアルでは、jQueryを使用して、入力要素がフォーカスされているかどうかをテストする方法について説明します。必要条件jQueryライブラリの基本的な知識手順jQueryのfocus()イベントを使用するfocus()イベントは、入力要素にフォーカスが当てられたときに発生します。このイベントを使用して、入力要素がフォーカスされているかどうかをテストできます。...


Webデザイナー必見!JavaScriptでリダイレクトを実装する3つのテクニック

これは最もシンプルで一般的な方法です。location. href プロパティにリダイレクト先のURLを代入することで、現在のページを別のページに置き換えます。この方法は、すべてのブラウザでサポートされていますが、リダイレクト前にユーザーに確認メッセージを表示するなどの処理はできません。...


React: useState、useReducer、getDerivedStateFromProps、componentWillReceiveProps の使い分け

概要React のライフサイクルメソッド componentWillReceiveProps と getDerivedStateFromProps は、コンポーネントのプロパティが変更されたときに実行されるメソッドです。しかし、それぞれの役割と使い方は異なります。...


Node.jsモジュールを使う前に知っておきたい! エラー「The engine "node" is incompatible with this module」の徹底解説

このエラーを解決するには、以下の2つの方法があります。Node. jsのバージョンをモジュールの要求バージョンに合わせるNode. jsのバージョン管理ツール(nvmなど)を使用して、モジュールが要求するバージョンにNode. jsをインストールします。...