ReferenceError: l'extraction n'est pas définie


178

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

RefernceError: l'extraction n'est pas définie

entrez la description de l'image ici

C'est la fonction que je fais, il est responsable de la récupération 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<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
Bienvenue à SO, veuillez fournir les détails sur ce que vous avez essayé jusqu'à présent? Veuillez fournir un exemple minimal, complet et vérifiable, le cas échéant. Veuillez également prendre le temps de lire Comment demander
pratibha

3
fetchn'est pas une méthode standard de nodejs - vous avez besoinnode-fetch
Jaromanda X

3
fetch()a été conçu pour le navigateur, puis rétroporté sur node.js dans un module tiers qui vous manque apparemment. La bibliothèque request()or request-promise()est construite de manière plus native pour node.js et prend en charge une gamme beaucoup plus large d'options pour node.js, y compris des flux, des méthodes d'authentification
Zillion

Réponses:


317

L' API fetch 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 comme ceci

npm i node-fetch --save

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

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

21
varest modifiable, je recommanderais de constl'utiliser à la place ...
Edwin Pratt

3
@ jasa1704 pourriez-vous s'il vous plaît choisir une réponse?
tecnocrata

36

S'il doit être accessible avec une portée globale

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

C'est une solution rapide et sale, essayez d'éliminer l'utilisation dans le code de production.


1
C'était le seul moyen pour que WebStorm reconnaisse la promesse renvoyée par fetchet remplisse automatiquement les méthodes disponibles. A convenu que cela devrait être évité en production, mais très utile pour les développeurs locaux!
FoxMulder900

18

Vous pouvez utiliser la recherche croisée de @lquixada

Indépendant de la plateforme: navigateurs, nœuds ou réactions natives

Installer

npm install --save cross-fetch

Usage

Avec des promesses:

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);
  });

Avec async / await:

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);
  }
})();

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

L'utilisation du polyfill de crossfetch a également fonctionné pour moi en utilisant du typographie et du nœud et en recevant l' ReferenceError: fetch is not definederreur de amazon-cognito-identity-js.
John Hamelink

7

Pour ceux qui utilisent également dactylographié sur node-js et obtiennent une ReferenceError: fetch is not definederreur

npm install ces packages:

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

Puis incluez:

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

28
amazon-cognito-identity-jsn'est pas pertinent pour cette question et il n'est pas nécessaire d'installer pour résoudre cette erreur. Il n'est pas non plus lié à la dactylographie.
cnvzmxcvmcx

Salut! Donc, j'ai exactement le même problème, mais cela ne résout toujours rien, avez-vous d'autres solutions?
Masnad Nihit

5

Vous devez utiliser le isomorphic-fetchmodule pour votre Nodeprojet car Nodeil ne contient pas Fetch APIencore. 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 ci-dessous dans votre projet:

import "isomorphic-fetch"

J'espère que cette réponse vous aidera.


6
Pas activement entretenu; a été des années depuis le dernier PR accepté. github.com/matthew-andrews/isomorphic-fetch/graphs/contributors
tomByrer

5

Le meilleur est la bibliothèque Axios pour la récupération. utilisez npm i --save axiospour installer et utilisez-le comme fetch, écrivez simplement axios au lieu de fetch, puis obtenez une réponse dans then () .


4

Node.js n'a pas implémenté la méthode fetch (), mais vous pouvez utiliser l'un des modules externes de ce fantastique environnement d'exécution pour JavaScript.

Dans l'une des réponses ci-dessus, "node-fetch" est cité et c'est un bon choix.

Dans votre dossier de projet (le répertoire où vous avez les scripts .js) installez ce module avec la commande:

npm i node-fetch --save

Ensuite, utilisez-le comme constante dans le script que vous souhaitez exécuter avec Node.js, quelque chose comme ceci:

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


2

C'est le problème lié à github . Ce bogue est lié à la version 2.0.0, vous pouvez le résoudre simplement en passant à la version 2.1.0. Tu peux courir npm i graphql-request@2.1.0-next.1


0

Ce qui suit fonctionne pour moi dans Node.js 12.x:

npm i node-fetch;

pour initialiser l'instance Dropbox:

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

pour par exemple télécharger un contenu (une méthode asynchrone utilisée dans ce cas):

await dbx.filesUpload({
  contents: <your content>,
  path: <file path>
});
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.