ReferenceError: вибір не визначений


177

У мене є ця помилка, коли я збираю свій код у 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);
  });   
}

4
Ласкаво просимо до SO, будь ласка, надайте подробиці щодо того, що ви намагалися до цього часу? Будь ласка, надайте мінімальний, повний та підтверджуваний приклад, де це потрібно. Також, будь ласка, знайдіть час, щоб прочитати Як просити
pratbha

3
fetchне стандартний метод nodejs - вам потрібенnode-fetch
Jaromanda X

3
fetch()був розроблений для веб-переглядача, а потім перенесений назад в node.js в сторонньому модулі, якого ви, очевидно, відсутні. Бібліотека request()або request-promise()побудована для node.js і підтримує набагато більш широкий спектр варіантів для node.js, включаючи потоки, методи автентифікації на мільйон тощо ...
jfriend00

Відповіді:


316

Вибірки 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);
  }
})();

Це допомогло метавизер api, добре пояснено в документації на github. Дякую за обмін
крупеш Anadkat

Використання кросфетча поліфіл також працював для мене, використовуючи машинопис і вузол та отримуючи ReferenceError: fetch is not definedпомилку від amazon-cognito-identity-js.
Джон

7

Для тих, хто також використовує typecript на 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"

Сподіваюся, що ця відповідь вам допоможе.


6
Не підтримується активно; минуло роки з моменту останнього прийнятого піару. github.com/matthew-andrews/isomorphic-fetch/graphs/contributors
tomByrer

5

Найкраще - це бібліотека Axios для отримання. використовувати npm i --save axiosдля installng і використовувати його як fetch, просто запишіть axios замість того, щоб отримати, а потім отримайте відповідь у тоді () .


4

Node.js не реалізував метод fetch (), але ви можете використовувати один із зовнішніх модулів цього фантастичного середовища виконання для JavaScript.

В одній з відповідей вище, "code-fetch" цитується, і це хороший вибір.

У папці проекту (каталог, де у вас є сценарії .js) встановіть цей модуль за допомогою команди:

npm i node-fetch - зберегти

Потім використовуйте його як константу в сценарії, який ви хочете виконати з Node.js, приблизно так:

const fetch = вимагати ("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>
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.