389 votes

ReferenceError: fetch n'est pas défini

J'ai cette erreur lorsque je compile mon code en node.js, comment puis-je la corriger?

RefernceError: fetch n'est pas défini

entrer la description de l'image ici

Voici la fonction que je suis en train de faire, elle est responsable de récupérer des informations à partir d'une base de données de films spécifique.

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

4 votes

Bienvenue sur SO, veuillez fournir les détails sur ce que vous avez essayé jusqu'à présent? Veuillez fournir un exemple minimal, complet et vérifiable où cela est nécessaire. Prenez également le temps de lire Comment poser une question

7 votes

fetch n'est pas une méthode standard de nodejs - vous avez besoin de node-fetch

4 votes

fetch() a été conçu pour le navigateur puis porté sur node.js dans un module tiers que vous semblez manquer. La bibliothèque request() ou request-promise() est plus nativement construite pour node.js et supporte une gamme beaucoup plus large d'options pour node.js, y compris les flux, une multitude de méthodes d'authentification, etc...

604voto

AdrianT Points 1456

La fetch API n'est pas implémentée dans Node.

Vous devez utiliser un module externe pour cela, comme node-fetch.

Installez-le dans votre application Node de cette manière

npm install node-fetch

puis placez la ligne ci-dessous en haut des fichiers où vous utilisez l'API fetch:

import fetch from "node-fetch";

33 votes

var est changeable, je recommande plutôt d'utiliser const à la place...

1 votes

Je crois que --save n'est pas nécessaire avec npm version 5+. Voir stackoverflow.com/questions/19578796/…

0 votes

En suivant ces instructions, j'ai dû enregistrer mon fichier avec l'extension .mjs pour que cela fonctionne.

80voto

Xinyang Li Points 4108

Ceci est une solution rapide et sale, veuillez essayer d'éliminer cette utilisation dans le code de production.

Si fetch doit être accessible avec une portée globale

import fetch from 'node-fetch'
globalThis.fetch = fetch

2 votes

C'était la seule façon dont j'ai pu faire en sorte que WebStorm reconnaisse la promesse retournée par fetch et auto-complète les méthodes disponibles. D'accord, cela devrait être évité en production, mais très utile pour le développement local!

1 votes

Cela aide beaucoup..

0 votes

@FoxMulder900 Voici comment vous pourriez toujours avoir IntelliSense sans le définir de manière globale : const nodeFetch = require('node-fetch') as typeof fetch;

33voto

Richard Vergis Points 164

Vous pouvez utiliser cross-fetch de @lquixada

Plateforme agnostique : navigateurs, node ou react native

Installer

npm install --save cross-fetch

Utilisation

Avec des promesses :

import fetch from 'cross-fetch';
// Ou simplement : importez 'cross-fetch/polyfill';

fetch('//api.github.com/users/lquixada')
  .then(res => {
    if (res.status >= 400) {
      throw new Error("Mauvaise réponse du serveur");
    }
    return res.json();
  })
  .then(user => {
    console.log(user);
  })
  .catch(err => {
    console.error(err);
  });

Avec async/await :

import fetch from 'cross-fetch';
// Ou simplement : importez 'cross-fetch/polyfill';

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

    if (res.status >= 400) {
      throw new Error("Mauvaise réponse du serveur");
    }

    const user = await res.json();

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

0 votes

Cela a aidé pour l'API metaweather, bien expliqué dans la documentation de Github. Merci pour le partage.

1 votes

En utilisant le polyfill de crossfetch, cela a également fonctionné pour moi en utilisant Typescript et Node et en recevant l'erreur ReferenceError: fetch is not defined de amazon-cognito-identity-js.

8voto

AmerllicA Points 1

Vous devez utiliser le module isomorphic-fetch pour votre projet Node car Node ne contient pas encore l'API Fetch. Pour résoudre ce problème, exécutez la commande ci-dessous :

npm install --save isomorphic-fetch es6-promise

Après l'installation, utilisez le code suivant dans votre projet :

import "isomorphic-fetch"

9 votes

Pas activement maintenu; cela fait des années depuis le dernier PR accepté. github.com/matthew-andrews/isomorphic-fetch/graphs/contributors

0 votes

Pour information, cela peut entraîner des difficultés dans les projets TypeScript car cette bibliothèque ne fournit pas de types appropriés. Un routeur plus simple est d'utiliser cross-fetch qui est très similaire mais fonctionne bien avec TypeScript. Pour une application React où vous supposez que fetch normal sera disponible dans le navigateur, vous pouvez en faire une dépendance de développement et utiliser import 'cross-fetch/polyfill'; dans la configuration des tests pour lisser les aspérités de l'environnement de test.

6voto

Mohammad Quanit Points 63

Le meilleur est la bibliothèque Axios pour les demandes. utilisez npm i --save axios pour l'installer et utilisez-la comme fetch, il suffit d'écrire axios à la place de fetch puis d'obtenir la réponse dans then().

0 votes

Il se passe plus fréquemment pendant la construction, bien que votre commentaire soit bon, le problème est différent de ce que vous avez proposé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X