संदर्भ: भ्रूण को परिभाषित नहीं किया गया है


177

मेरे पास यह त्रुटि है जब मैं अपना कोड नोड.जेएस में संकलित करता हूं, तो मैं इसे कैसे ठीक कर सकता हूं?

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
एसओ में आपका स्वागत है, कृपया विवरण प्रदान करें कि आपने अब तक क्या किया है? कृपया जहां भी आवश्यक हो , न्यूनतम, पूर्ण और सत्यापन योग्य उदाहरण प्रदान करें । कृपया यह भी पढ़ने का समय
निकालें कि

3
fetchएक मानक नोड्ज विधि नहीं है - आपको जरूरत हैnode-fetch
जैरोन्डा एक्स

3
fetch()ब्राउज़र के लिए डिज़ाइन किया गया था और फिर एक तीसरे पक्ष के मॉड्यूल में नोड-जेएस के लिए वापस पोर्ट किया गया था, जो आप स्पष्ट रूप से गायब हैं। request()या request-promise()पुस्तकालय अधिक देशी रूप Node.js के लिए बनाया गया है और नदियों, एक असंख्य प्रमाणीकरण तरीकों, आदि शामिल Node.js के लिए विकल्पों में से एक अधिक व्यापक रेंज का समर्थन करता है है ...
jfriend00

जवाबों:


316

लाने एपीआई नोड में लागू नहीं है।

आपको इसके लिए एक बाहरी मॉड्यूल का उपयोग करने की आवश्यकता है, जैसे नोड-भ्रूण

इसे इस तरह से अपने नोड एप्लिकेशन में स्थापित करें

npm i node-fetch --save

फिर उन फ़ाइलों के शीर्ष पर नीचे की ओर लाइन डालें जहाँ आप भ्रूण एपीआई का उपयोग कर रहे हैं:

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

21
varपरिवर्तनशील है, मैं सलाह दूंगा कि constइसके बजाय इसका इस्तेमाल किया जाना चाहिए ...
एडविन प्रैट

3
@ jasa1704 क्या आप कृपया एक उत्तर चुन सकते हैं?
tecnocrata

36

अगर इसे वैश्विक दायरे में पहुंचना है

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

यह एक त्वरित गंदा फिक्स है, उत्पादन कोड में उपयोग को समाप्त करने का प्रयास करें।


1
यह एकमात्र तरीका था जिससे मैं वेबस्टॉर्म प्राप्त करने में सक्षम था fetchऔर उपलब्ध तरीकों को स्वत: पूर्ण करने के वादे को पहचान सकता था । सहमत थे कि इसे उत्पादन से बचा जाना चाहिए, लेकिन स्थानीय देव के लिए बहुत उपयोगी है!
फॉक्समूलर 900

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

Async / प्रतीक्षा के साथ:

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

इसने मैथवेर आपी के लिए मदद की, अच्छी तरह से गिथब डॉक्यूमेंटेशन में बताया गया है। साझा करने के लिए धन्यवाद
क्रुपेश अनदकट

क्रॉसफैच की पॉलीफिल का उपयोग करना भी टाइपस्क्रिप्ट और नोड का उपयोग करके मेरे लिए काम करता है और इससे ReferenceError: fetch is not definedत्रुटि प्राप्त करता है amazon-cognito-identity-js
जॉन हैमिलिंक

7

नोड-जेएस पर टाइपस्क्रिप्ट का उपयोग करने वालों के लिए भी और एक त्रुटि हो रही है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

सबसे अच्छा एक लाने के लिए धुरी पुस्तकालय है। npm i --save axiosइंस्टॉल करने के लिए उपयोग करें और इसे भ्रूण की तरह उपयोग करें, बस लाने के बजाय axios लिखें और फिर तब () में प्रतिक्रिया प्राप्त करें ।


4

Node.js ने भ्रूण () विधि को लागू नहीं किया है, लेकिन आप जावास्क्रिप्ट के लिए इस शानदार निष्पादन वातावरण के बाहरी मॉड्यूल में से एक का उपयोग कर सकते हैं।

उपरोक्त उत्तरों में से एक में, "नोड-भ्रूण" का हवाला दिया गया है और यह एक अच्छा विकल्प है।

अपने प्रोजेक्ट फ़ोल्डर में (निर्देशिका जहाँ आपके पास .js स्क्रिप्ट्स) कमांड के साथ उस मॉड्यूल को स्थापित करें:

npm i नोड-भ्रूण - save

फिर इसे स्क्रिप्ट में एक स्थिरांक के रूप में उपयोग करें जिसे आप Node.js के साथ निष्पादित करना चाहते हैं, कुछ इस तरह से:

const fetch = आवश्यकता ("नोड-ब्रंच");


2

यह संबंधित गितुब मुद्दा है। यह बग 2.0.0 संस्करण से संबंधित है, आप इसे केवल 2.1.0 संस्करण में अपग्रेड करके हल कर सकते हैं। तुम दौड़ सकते हो npm i graphql-request@2.1.0-next.1


0

मेरे लिए Node.js 12.x में निम्नलिखित काम करता है:

npm i node-fetch;

ड्रॉपबॉक्स उदाहरण को आरंभ करने के लिए:

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.