ReferenceError:fetch 未定义
2018-01-25
963611
我在 node.js 中编译代码时出现此错误,如何修复?
RefernceError:未定义 fetch
这是我正在执行的功能,它负责从特定的电影数据库中恢复信息。
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);
});
}
3个回答
如果您使用的是 Node 18 之前的版本,则 fetch API 并非开箱即用,您需要使用外部模块来实现,例如 node-fetch 。
像这样将其安装在您的 Node 应用程序中
npm install node-fetch
然后将以下行放在您使用 fetch API 的文件顶部:
import fetch from "node-fetch";
如果您的应用程序无法更新以使用 ESM(又名
import
语法),并且您需要使用 CommonJS(又名
require
),那么请坚持使用 v2
node-fetch
。根据其 README,
v2 将继续接收关键错误修复
。
npm install node-fetch@2
然后这将起作用,
const fetch = require("node-fetch");
Adrian Theodorescu
2018-01-25
这是一个快速修复,请尝试在生产代码中消除这种用法。
如果
fetch
必须可通过全局范围访问
import fetch from 'node-fetch'
globalThis.fetch = fetch
XYZ
2018-07-22
你可以使用 cross-fetch 来自 @lquixada
Platform agnostic: browsers, node or react native
安装
npm install --save cross-fetch
使用
使用承诺:
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);
});
使用 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);
}
})();
Richard Vergis
2018-09-26