当我在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-js上使用typescript并得到ReferenceError: fetch is not defined错误的人

NPM安装这些包:

    "amazon-cognito-identity-js": "3.0.11"
    "node-fetch": "^2.3.0"

然后包括:

import Global = NodeJS.Global;
export interface GlobalWithCognitoFix extends Global {
    fetch: any
}
declare const global: GlobalWithCognitoFix;
global.fetch = require('node-fetch');

其他回答

编辑-新的解决方案

要使用最新版本(3.0.0),必须像这样导入:

const fetch = (url) => import('node-fetch').then(({default: fetch}) => fetch(url));


古老的回答:

这可能不是最好的解决方案,但如果你安装这个版本:

npm install node-fetch@1.7.3

现在您可以使用下面的行而不会出现错误。

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

对我来说,这些看起来更简单。

npm install node-fetch
import fetch from "node-fetch";

下面的工作为我在Node.js 12.x:

npm i node-fetch;

初始化Dropbox实例:

var Dropbox = require("dropbox").Dropbox;
var dbx = new Dropbox({
   accessToken: <your access token>,
   fetch: require("node-fetch")    
});

例如,上传一个内容(在这种情况下使用异步方法):

await dbx.filesUpload({
  contents: <your content>,
  path: <file path>
});

如果您使用的是18之前的Node版本,那么获取API并不是开箱即用的,您需要使用外部模块来实现,比如节点获取。

像这样在Node应用程序中安装它

npm install node-fetch

然后把下面的一行放在你正在使用fetch API的文件的顶部:

import fetch from "node-fetch";

你应该在你的文件中添加这个导入:

import * as fetch from 'node-fetch';

然后,运行这段代码来添加节点获取: 添加节点获取

如果你正在使用typescript,那么安装节点获取类型: $ yarn添加@types/node-fetch