web-dev-qa-db-fra.com

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

J'ai cette erreur lorsque je compile mon code dans node.js, comment puis-je résoudre ce problème?

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

enter image description here

C'est la fonction que je suis en train de faire, il est responsable de la récupération des informations 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);
  });   
}
78
jasa1704

Le API de récupération n'est pas implémenté dans Node.

Vous devez utiliser un module externe pour cela, comme extraction de nœud .

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 d'extraction:

const fetch = require("node-fetch");
134
Adrian T

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

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

Ceci est un correctif rapide, essayez d'éliminer l'utilisation dans le code de production.

13
Lorem Ipsum Dolor

Vous pouvez utiliser cross-fetch de @ lquixada

Plate-forme agnostique: navigateurs, nœud ou réactif natif

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/wait:

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

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

4
Mohammad Quanit

Vous devez utiliser le module isomorphic-fetch dans votre projet Node car Node ne contient pas encore _Fetch API_. pour résoudre ce problème, lancez 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.

4
AmerllicA

Pour ceux qui utilisent aussi TypeScript sur node-js et obtiennent une erreur ReferenceError: fetch is not defined

npm install ces paquets:

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

Ensuite, inclure:

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