ReferenceError: getirme tanımlanmadı


178

Kodum node.js'de derlediğimde bu hatayı alıyorum, nasıl düzeltebilirim?

RefernceError: getirme tanımlanmadı

resim açıklamasını buraya girin

Yaptığım işlev budur, belirli bir film veritabanındaki bilgileri kurtarmaktan sorumludur.

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'ya hoş geldiniz, lütfen şimdiye kadar denediğinizle ilgili ayrıntıları sağlayın? Lütfen gerektiğinde Minimal, Complete ve Doğrulanabilir bir örnek verin. Ayrıca lütfen Zaman Sormak
pratibha

3
fetchstandart bir nodejs yöntemi değil - ihtiyacınıznode-fetch
Jaromanda X

3
fetch()tarayıcı için tasarlanmış ve görünüşte eksik olduğunuz bir üçüncü taraf modülünde node.js'ye geri taşınmıştır. request()Veya request-promise()kitaplık daha doğal ... node.js için inşa vb akışları, milyonlarca kimlik doğrulama yöntemleri de dahil olmak üzere node.js için seçenekler çok daha geniş yelpazede destekler
jfriend00

Yanıtlar:


317

Getirme API Düğümünde uygulanmadı.

Bunun için düğüm getirme gibi harici bir modül kullanmanız gerekir .

Düğüm uygulamanıza böyle yükleyin

npm i node-fetch --save

ardından aşağıdaki satırı getirme API'sını kullandığınız dosyaların üstüne yerleştirin:

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

21
vardeğiştirilebilir, constbunun yerine kullanılmasını tavsiye ederim ...
Edwin Pratt

3
@ jasa1704 lütfen bir cevap seçer misiniz?
tecnocrata

36

Küresel bir kapsamla erişilebilir olması gerekiyorsa

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

Bu hızlı bir kirli düzeltme, üretim kodundaki kullanımı ortadan kaldırmaya çalışın.


1
WebStorm'un döndürdüğü sözü tanımasını fetchve mevcut yöntemleri otomatik tamamlamasını sağlamanın tek yolu buydu . Üretimde kaçınılması gerektiğini kabul etti, ancak yerel geliştiriciler için çok yararlı!
FoxMulder900

18

Sen kullanabilirsiniz çapraz getirme gelen @lquixada

Platform agnostik: tarayıcılar, düğüm veya yerel tepki

Yüklemek

npm install --save cross-fetch

kullanım

Sözlerle:

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

Zaman uyumsuz / beklemede:

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

Bu, github belgelerinde iyi açıklanmış metaweather api için yardımcı oldu. Paylaşım için teşekkürler
krupesh Anadkat

Crossfetch'in çoklu dolgusunu kullanmak benim için typcript ve düğüm kullanarak ve ReferenceError: fetch is not definedhatayı almak için çalıştı amazon-cognito-identity-js.
John Hamelink

7

Olanlar için de kullanılarak typescript üzerine düğüm-js ve alıyorsanız ReferenceError: fetch is not definedhata

npm install şu paketler:

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

Ardından şunları ekleyin:

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

28
amazon-cognito-identity-jsbu soru ile alakalı değildir ve bu hatayı çözmek için yüklenmesi gerekmez. Ayrıca daktilo ile ilgili değildir.
cnvzmxcvmcx

Selam! Yani ben de aynı sorunu yaşıyorum, ama bu hala bir şey düzeltmek değil, başka bir iş var mı?
Masnad Nihit

5

Henüz içermediği için isomorphic-fetchmodülü Nodeprojenize kullanmalısınız . Bu sorunu çözmek için aşağıdaki komutu çalıştırın:NodeFetch API

npm install --save isomorphic-fetch es6-promise

Kurulumdan sonra projenizde aşağıdaki kodu kullanın:

import "isomorphic-fetch"

Umarım bu cevap size yardımcı olur.


6
Aktif olarak korunmaz; son kabul edilen PR'dan bu yana yıllar geçti. github.com/matthew-andrews/isomorphic-fetch/graphs/contributors
tomByrer

5

En iyisi getirme için Axios kütüphanesidir. Kullanım npm i --save axiosinstallng için ve kullanmak getir gibi yerine sadece yazma AXIOS içinde yanıt almak sonra alıp sonra () .


4

Node.js, fetch () yöntemini uygulamadı, ancak JavaScript için bu harika yürütme ortamının harici modüllerinden birini kullanabilirsiniz.

Yukarıdaki cevaplardan birinde, "düğüm getirme" atıfta bulunulur ve bu iyi bir seçimdir.

Proje klasörünüzde (.js komut dosyalarının bulunduğu dizin) bu modülü şu komutla yükleyin:

npm i düğüm getirme - kaydetme

Sonra Node.js ile yürütmek istediğiniz komut dosyasında sabit olarak kullanın, şöyle bir şey:

const fetch = requir ("düğüm getirme");


2

Bu ilgili github sorunudur Bu hata 2.0.0 sürümü ile ilgilidir, sadece 2.1.0 sürümüne yükselterek çözebilirsiniz. Koşabilirsin npm i graphql-request@2.1.0-next.1


0

Benim için Node.js 12.x'te çalışır:

npm i node-fetch;

Dropbox örneğini başlatmak için:

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

örneğin bir içerik yüklemek için (bu durumda kullanılan eşzamansız bir yöntem):

await dbx.filesUpload({
  contents: <your content>,
  path: <file path>
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.