ReferenceError: ophalen is niet gedefinieerd

Ik krijg deze fout wanneer ik mijn code compileer in node.js, hoe kan ik dit oplossen?

RefernceError: ophalen is niet gedefinieerd

Dit is de functie die ik doe, het is verantwoordelijk voor het herstellen van informatie uit een specifieke filmdatabase.

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

Antwoord 1, autoriteit 100%

De fetch APIis niet geïmplementeerd in Node.

Daarvoor moet je een externe module gebruiken, zoals node-fetch.

Installeer het als volgt in uw Node-toepassing

npm install node-fetch

zet dan de onderstaande regel bovenaan de bestanden waar je de fetch API gebruikt:

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

Antwoord 2, autoriteit 14%

Als het toegankelijk moet zijn met een globaal bereik

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

Dit is een snelle, vuile oplossing, probeer dit gebruik in de productiecode te elimineren.


Antwoord 3, autoriteit 5%

Je kunt cross-fetchgebruiken vanaf @lquixada

Platformagnostisch: browsers, node of native reageren

Installeren

npm install --save cross-fetch

Gebruik

Met beloften:

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

Met asynchrone/wachten:

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

Antwoord 4, autoriteit 2%

U moet deze import toevoegen aan uw bestand:

import * as fetch from 'node-fetch';

Voer vervolgens deze code uit om de node-fetch:
. toe te voegen
$ yarn add node-fetch

Als je met typscript werkt, installeer dan node-fetch-types:
$ yarn add @types/node-fetch


Antwoord 5, autoriteit 2%

Als u wilt voorkomen dat npm wordt geïnstalleerd en niet in de browser wordt uitgevoerd, kunt u ook de nodejs https-module gebruiken;

const https = require('https')
const url = "https://jsonmock.hackerrank.com/api/movies";
https.get(url, res => {
  let data = '';
  res.on('data', chunk => {
    data += chunk;
  });
  res.on('end', () => {
    data = JSON.parse(data);
    console.log(data);
  })
}).on('error', err => {
  console.log(err.message);
})

Antwoord 6, autoriteit 2%

Node.js heeft de methode fetch() niet geïmplementeerd, maar u kunt een van de externe modules van deze fantastische uitvoeringsomgeving voor JavaScript gebruiken.

In een van de bovenstaande antwoorden wordt “node-fetch” genoemd en dat is een goede keuze.

In uw projectmap (de directory waar u de .js-scripts hebt) Installeer die module met de opdracht:

NPM I Node-Fetch –Save

Gebruik het dan als een constante in het script dat u wilt uitvoeren met NODE.JS, zoiets als volgt:

const fetch = vereisen (“knooppunt-fetch”);


Antwoord 7

U moet de isomorphic-fetchmodule gebruiken Naar uw NodeProject vanwege Nodebevat niet Fetch API. Voor het vaststellen van dit probleem Voer hieronder opdracht uit:

npm install --save isomorphic-fetch es6-promise

Na installatie gebruik hieronder code in uw project:

import "isomorphic-fetch"

Ik hoop dat dit antwoord u helpt.


Antwoord 8

Voor degenen die ook typescript gebruiken op Node-JS en ontvang een ReferenceError: fetch is not definedFOUT

npm installdeze pakketten:

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

Neem dan op:

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

Antwoord 9

Beste is Axios Library for Fetching.
gebruik npm i --save axiosvoor installatie en gebruik het als fetch, schrijf gewoon axios in plaats van fetch en krijg dan antwoord in then().


Antwoord 10

Het lijkt erop dat een ondersteunings-URL-schema wordt opgehaald met “http” of “https” voor CORS-verzoeken.

Installeer node fetch-bibliotheek npm install node-fetch, lees het bestand en parseer naar json.

const fs = require('fs')
const readJson = filename => {
  return new Promise((resolve, reject) => {
    if (filename.toLowerCase().endsWith(".json")) {
      fs.readFile(filename, (err, data) => {
        if (err) {
          reject(err)
          return
        }
        resolve(JSON.parse(data))
      })
    }
    else {
      reject(new Error("Invalid filetype, <*.json> required."))
      return
    }
  })
}
// usage
const filename = "../data.json"
readJson(filename).then(data => console.log(data)).catch(err => console.log(err.message))

Antwoord 11

In HackerRank zijn sommige bibliotheken standaard geïnstalleerd en andere niet.

Omdat Node.js wordt uitgevoerd, de fetch APIis niet standaard geïnstalleerd.

U kunt het beste controleren of de bibliotheken al dan niet zijn geïnstalleerd.

bovenaan de oefening staat het volgende:

const https = require('https');

Probeer dit ook bovenaan toe te voegen:

const axios = require('axios');

en voer vervolgens de code uit.

Als er een compilatiefout is, is deze niet beschikbaar, anders kunt u axiosgebruiken, wat een goed alternatief is voor fetch

Om het te gebruiken met then, kun je:

function getMovieTitles(substr){
  axios.get(url)
    .then(function(response){
      console.log(response.data);
    })
}

of gebruik maken van de async/await

async function getMovieTitles(substr){
  let response = await axios.get(url)
  console.log(response.data);
}

Antwoord 12

Dit is het gerelateerde github probleem
Deze bug is gerelateerd aan versie 2.0.0, je kunt het oplossen door simpelweg te upgraden naar versie 2.1.0.
Je kan lopen
npm i [email protected]


Antwoord 13

In node.js kun je het volgende gebruiken: node-fetchpakket

npm i node-fetch

dan :

'use strict'
const fetch = require('node-fetch')

hier is een volledig voorbeeld in (nodejs):

const fetch = require("node-fetch");
const fetchData = async () => {
  const res = await fetch("https://restcountries.eu/rest/v2/alpha/col"); // fetch() returns a promise, so we need to wait for it
  const country = await res.json(); // res is now only an HTTP response, so we need to call res.json()
  console.log(country); // Columbia's data will be logged to the dev console
};
fetchData();

Antwoord 14

Het volgende werkt voor mij in Node.js 12.x:

npm i node-fetch;

om de Dropbox-instantie te initialiseren:

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

naar bijv. upload een inhoud (een asynchrone methode die in dit geval wordt gebruikt):

await dbx.filesUpload({
  contents: <your content>,
  path: <file path>
});

Antwoord 15

Voor mij zien deze er eenvoudiger uit.

npm install node-fetch
import fetch from "node-fetch";

Antwoord 16

Er zijn eigenlijk veel verschillende bibliotheken om fetchbeschikbaar te maken in de browser.

De belangrijkste die ik ken zijn:

Ik gebruik momenteel node-fetch en het heeft prima gewerkt, maar ik weet niet echt welke “de beste” is. (hoewel de openbase.com-pagina’s die ik heb gelinkt om wat metadata te geven over het gebruik [bijv. Github-sterren, npm-downloads], wat kan helpen)


Antwoord 17

Klinkt misschien gek, maar ik heb gewoon npm i node-fetch --savegebeld in het verkeerde project. Zorg ervoor dat u zich in de juiste map bevindt.

Other episodes