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