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-fetch
module gebruiken Naar uw Node
Project vanwege Node
bevat 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 defined
FOUT
npm install
deze 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 axios
voor 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 axios
gebruiken, 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 fetch
beschikbaar 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 --save
gebeld in het verkeerde project. Zorg ervoor dat u zich in de juiste map bevindt.