当我在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);
  });   
}

当前回答

这个答案并没有直接回答这个问题。相反,它提出了一种替代方案。

为什么?因为使用'node-fetch'变得越来越复杂,因为你不能使用const fetch = require('node-fetch')导入更新的版本。你需要做更多的事情才能让它成功。

尝试使用axios包:

简单安装npm i axios 抓取的代码是这样的

const response = await axios.get(url).then(res => res.data)

其他回答

这是相关的github问题 此错误与2.0.0版本有关,您可以通过简单地升级到2.1.0版本来解决它。 你可以跑 NPM I graphql-request@2.1.0-next.1

实际上有很多不同的库可以在浏览器中获取。

我所知道的主要问题有:

node-fetch cross-fetch whatwg-fetch isomorphic-fetch

我目前使用节点获取,它工作得很好,但我真的不知道哪一个是“最好的”。(尽管我链接的openbase.com页面提供了一些使用情况的元数据。Github星,npm下载],这可以帮助)

npm i node-fetch 

一旦安装,在你的JavaScript文件中:

import fetch from "node-fetch";

最后制作这个更改包。json文件:

"type": "module"

在node.js中,你可以使用:node-fetch包

npm i node-fetch

然后:

import fetch from 'node-fetch';

以下是(nodejs)中的完整示例:

import fetch from "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();

可能听起来很傻,但我只是简单地调用npm I node-fetch -save在错误的项目。确保您在正确的目录中。