ReferenceError:フェッチが定義されていません


177

node.jsでコードをコンパイルするとこのエラーが発生します。どうすれば修正できますか?

RefernceError:フェッチが定義されていません

ここに画像の説明を入力してください

これは私が行っている機能であり、特定の映画データベースから情報を回復する責任があります。

function getMovieTitles(substr){  
  pageNumber=1;
  let url = 'https://jsonmock.hackerrank.com/api/movies/search/?Title=' + substr + "&page=" + pageNumber;
  fetch(url).then((resp) => resp.json()).then(function(data) {
    let movies = data.data;
    let totPages = data.total_pages;
    let sortArray = [];
    for(let i=0; i<movies.length;i++){
        sortArray.push(data.data[i].Title);
     }
    for(let i=2; i<=totPages; i++){
           let newPage = i;
           let url1 = 'https://jsonmock.hackerrank.com/api/movies/search/?Title=' + substr + "&page=" + newPage;

          fetch(url1).then(function(response) {
              var contentType = response.headers.get("content-type");
              if(contentType && contentType.indexOf("application/json") !== -1) {
                return response.json().then(function(json) {
                  //console.log(json); //uncomment this console.log to see the JSON data.

                 for(let i=0; i<json.data.length;i++){
                    sortArray.push(json.data[i].Title);
                 }

                 if(i==totPages)console.log(sortArray.sort());

                });
              } else {
                console.log("Oops, we haven't got JSON!");
              }
            });

        }
  })
  .catch(function(error) {
    console.log(error);
  });   
}

4
SOへようこそ。これまでに何を試したか、詳細を教えてください。必要に応じて、最小限の完全で検証可能な例を提供してください。また、時間をかけて質問する方法
プラチバ

3
fetchは標準のnodejsメソッドではありません-必要ですnode-fetch
Jaromanda X

3
fetch()はブラウザ用に設計されており、サードパーティ製モジュールのnode.jsにバックポートされているため、見当たらないようです。request()またはrequest-promise()ライブラリーは、よりネイティブに... Node.jsのために構築され、などのストリーム、無数の認証方法、など、Node.jsのためのオプションのはるかに広い範囲をサポートしている
jfriend00

回答:


314

フェッチAPIは、ノードに実装されていません。

そのためには、node-fetchなどの外部モジュールを使用する必要があります

このようにNodeアプリケーションにインストールしてください

npm i node-fetch --save

次に、フェッチAPIを使用しているファイルの上部に以下の行を追加します。

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

21
varは変更可能constです。代わりに使用することをお勧めします...
Edwin Pratt

3
@ jasa1704答えを選んでいただけますか?
tecnocrata

36

グローバルスコープでアクセスできる必要がある場合

global.fetch = require("node-fetch");

これは簡単なダーティフィックスです。本番コードでの使用を排除してください。


1
これが、WebStormに返されたプロミスを認識させfetch、使用可能なメソッドをオートコンプリートさせる唯一の方法でした。本番環境では避ける必要があることに同意しましたが、ローカルの開発者には非常に役立ちます。
FoxMulder900 2018年

18

@lquixadaからクロスフェッチを使用できます

プラットフォームに依存しない:ブラウザー、ノード、またはネイティブの反応

インストール

npm install --save cross-fetch

使用法

約束あり:

import fetch from 'cross-fetch';
// Or just: import 'cross-fetch/polyfill';

fetch('//api.github.com/users/lquixada')
  .then(res => {
    if (res.status >= 400) {
      throw new Error("Bad response from server");
    }
    return res.json();
  })
  .then(user => {
    console.log(user);
  })
  .catch(err => {
    console.error(err);
  });

非同期/待機あり:

import fetch from 'cross-fetch';
// Or just: import 'cross-fetch/polyfill';

(async () => {
  try {
    const res = await fetch('//api.github.com/users/lquixada');

    if (res.status >= 400) {
      throw new Error("Bad response from server");
    }

    const user = await res.json();

    console.log(user);
  } catch (err) {
    console.error(err);
  }
})();

これはgithubのドキュメントでよく説明されているメタウェザーAPIに役立ちました。共有をありがとう
krupesh Anadkat

クロスフェッチのポリフィルを使用すると、typescriptとノードを使用してReferenceError: fetch is not definedからエラーを受け取ることもできましたamazon-cognito-identity-js
John Hamelink

7

node-jsでtypescriptを使用していてエラーが発生している人ReferenceError: fetch is not defined

npm install これらのパッケージ:

    "amazon-cognito-identity-js": "3.0.11"
    "node-fetch": "^2.3.0"

次に含めます:

import Global = NodeJS.Global;
export interface GlobalWithCognitoFix extends Global {
    fetch: any
}
declare const global: GlobalWithCognitoFix;
global.fetch = require('node-fetch');

28
amazon-cognito-identity-jsこの質問には関係がなく、このエラーを解決するためにインストールする必要はありません。また、typescriptとは関係ありません。
cnvzmxcvmcx

こんにちは!だから私はまったく同じ問題を抱えていますが、これはまだ何も修正していません、他の回避策はありますか?
Masnad Nihit

5

にはまだ含まれていないためisomorphic-fetchNodeプロジェクトにモジュールを使用する必要NodeがありますFetch API。この問題を修正するには、以下のコマンドを実行します。

npm install --save isomorphic-fetch es6-promise

インストール後、プロジェクトで以下のコードを使用します。

import "isomorphic-fetch"

この回答がお役に立てば幸いです。


6
積極的に維持されていない; 最後に承認されたPRから何年も経っています。 github.com/matthew-andrews/isomorphic-fetch/graphs/contributors
tomByrer

5

一番良いのは、フェッチ用のAxiosライブラリです。使用npm i --save axiosinstallngため、それを使用してフェッチのように、だけではなく、書き込みaxiosで応答を取得、その後フェッチし、その後、()


4

Node.jsはfetch()メソッドを実装していませんが、JavaScriptのこの素晴らしい実行環境の外部モジュールの1つを使用できます。

上記の回答の1つで、「ノードフェッチ」が引用されていますが、これは良い選択です。

プロジェクトフォルダー(.jsスクリプトがあるディレクトリ)に、次のコマンドでそのモジュールをインストールします。

npm i node-fetch --save

次に、Node.jsで実行するスクリプトの定数として次のように使用します。

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


1

これは関連するgithubの問題です このバグは2.0.0バージョンに関連しており、バージョン2.1.0にアップグレードするだけで解決できます。あなたは走ることができます npm i graphql-request@2.1.0-next.1


0

以下はNode.js 12.xで私のために動作します:

npm i node-fetch;

Dropboxインスタンスを初期化するには:

var Dropbox = require("dropbox").Dropbox;
var dbx = new Dropbox({
   accessToken: <your access token>,
   fetch: require("node-fetch")    
});

たとえばコンテンツをアップロードするには(この場合は非同期メソッドを使用します):

await dbx.filesUpload({
  contents: <your content>,
  path: <file path>
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.