ReferenceError: выборка не определена

178

У меня есть эта ошибка, когда я компилирую свой код в node.js, как я могу это исправить?

RefernceError: выборка не определена

введите описание изображения здесь

Это функция, которую я выполняю, она отвечает за восстановление информации из конкретной базы данных фильмов.

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);
  });   
}
jasa1704
источник
4
Добро пожаловать в SO, пожалуйста, предоставьте детали того, что вы уже пробовали? Пожалуйста, предоставьте минимальный, полный и проверяемый пример, где это необходимо. Также, пожалуйста, найдите время, чтобы прочитать « Как спросить»
pratibha
3
fetchэто не стандартный метод nodejs - вам нужноnode-fetch
Jaromanda X
3
fetch()был разработан для браузера и затем перенесен обратно в node.js в стороннем модуле, который, по-видимому, отсутствует. Библиотека request()or request-promise()более встроена для node.js и поддерживает гораздо более широкий диапазон опций для node.js, включая потоки, методы аутентификации zillion и т. Д.
jfriend00

Ответы:

317

Выборки API не реализован в узле.

Для этого вам нужно использовать внешний модуль, например, node-fetch .

Установите его в своем приложении Node, как это

npm i node-fetch --save

затем поместите строку внизу вверху файлов, где вы используете API выборки:

const fetch = require("node-fetch");
Адриан Т
источник
21
varизменчив, я бы порекомендовал constиспользовать его вместо этого ...
Эдвин Пратт
3
@ jasa1704 не могли бы вы выбрать ответ?
tecnocrata
36

Если это должно быть доступно с глобальной областью действия

global.fetch = require("node-fetch");

Это быстрое грязное исправление, попробуйте исключить использование в рабочем коде.

Лорем Ипсум Долор
источник
1
Это был единственный способ, с помощью которого мне удалось заставить WebStorm распознавать обещание, возвращаемое, fetchи автоматически заполнять доступные методы. Договорились, что этого следует избегать в производстве, но очень полезно для местного разработчика!
FoxMulder900
18

Вы можете использовать перекрестную выборку от @lquixada

Независимость от платформы: браузеры, узел или реагировать нативно

устанавливать

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

С асинхронным ожиданием:

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);
  }
})();
Ричард Вергис
источник
Это помогло для metaweather api, хорошо объясненного в документации github. Спасибо за обмен
Крупеш Анадкат
Использование polyfill для crossfetch также помогло мне с использованием машинописи и узла и получением ReferenceError: fetch is not definedошибки от amazon-cognito-identity-js.
Джон
7

Для тех, кто также использует машинопись на node-js и получает ReferenceError: fetch is not definedошибку

npm install эти пакеты:

    "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');
зь
источник
28
amazon-cognito-identity-jsне имеет отношения к этому вопросу и не требует установки для устранения этой ошибки. Это также не относится к машинописи.
cnvzmxcvmcx
Здравствуй! Так что у меня точно такая же проблема, но это все еще ничего не исправит, у вас есть какая-то другая работа?
Маснад Нихит
5

Вы должны использовать isomorphic-fetchмодуль для вашего Nodeпроекта, потому что Nodeеще не содержит Fetch API. для решения этой проблемы выполните следующую команду:

npm install --save isomorphic-fetch es6-promise

После установки используйте код ниже в вашем проекте:

import "isomorphic-fetch"

Надеюсь, этот ответ поможет вам.

AmerllicA
источник
6
Не активно поддерживается; Прошло много лет с момента последнего принятого пиара. github.com/matthew-andrews/isomorphic-fetch/graphs/contributors
tomByrer
5

Лучший из них - библиотека Axios для загрузки. используйте npm i --save axiosдля установки и используйте его как fetch, просто напишите axios вместо fetch, а затем получите ответ в then () .

Мухаммед Кванит
источник
4

Node.js не реализовал метод fetch (), но вы можете использовать один из внешних модулей этой фантастической среды выполнения для JavaScript.

В одном из приведенных выше ответов цитируется "node-fetch", и это хороший выбор.

В папке вашего проекта (в каталоге, где у вас есть скрипты .js) установите этот модуль с помощью команды:

нпм я нод-выборка - сохранить

Затем используйте его как константу в скрипте, который вы хотите выполнить с Node.js, примерно так:

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

Мигель Мурильо
источник
2

Это связанная проблема GitHub. Эта ошибка связана с версией 2.0.0, вы можете решить ее, просто обновив до версии 2.1.0. Вы можете запустить npm i graphql-request@2.1.0-next.1

Асма
источник
0

В 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>
});
Павел Музик
источник