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

当前回答

在HackerRank中,有些库默认安装,有些没有安装。

因为它运行的是Node.js,所以默认情况下不会安装获取API。

最好的方法是检查是否安装了库。

在练习的顶部,有以下几点:

const https = require('https');

请试着把这个也添加到顶部:

const axios = require('axios');

然后运行代码。

如果存在编译错误,则不可用,否则可以使用axios,这是获取的一个很好的替代方法

要使用它,你可以:

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

或者利用async/await

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

其他回答

Node.js还没有实现fetch()方法,但你可以使用这个出色的JavaScript执行环境的外部模块之一。

在另一个答案中,引用了“节点取回”,这是一个不错的选择。

在你的项目文件夹(你有.js脚本的目录)用命令安装该模块:

npm i node-fetch --save

然后在你想用Node.js执行的脚本中使用它作为一个常量,就像这样:

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

你必须使用同构获取模块到你的Node项目,因为Node还不包含获取API。要解决这个问题,请执行以下命令:

npm install --save isomorphic-fetch es6-promise

安装后,在您的项目中使用以下代码:

import "isomorphic-fetch"

如果你想避免npm安装而不能在浏览器中运行,你也可以使用nodejs的https模块;

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

如需安装:

npm install --save global-fetch

then

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

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

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

尝试使用axios包:

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

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