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에 오신 것을 환영합니다. 지금까지 무엇을 시도했는지에 대한 세부 정보를 제공해주십시오. 필요한 경우 최소, 완전 및 검증 가능한 예를 제공하십시오 . 또한 시간을
— 내어

3
fetch표준 nodejs 방법이 아닙니다-필요node-fetch
— Jaromanda X

3
fetch()브라우저 용으로 설계된 다음 타사 모듈에서 node.js로 백 포트되어 분명히 누락되었습니다. request()또는 request-promise()라이브러리는 더 기본적으로 ... Node.js를위한 내장 등 스트림, 엄청나게 많은 인증 방법을 포함 Node.js를 옵션의 훨씬 넓은 범위를 지원합니다
— jfriend00

답변:


316

가져 오기 API는 노드에 구현되지 않습니다.

node-fetch 와 같은 외부 모듈을 사용해야합니다 .

다음과 같이 노드 애플리케이션에 설치하십시오.

npm i node-fetch --save

그런 다음 페치 API를 사용하는 파일의 맨 아래에 아래 행을 넣으십시오.

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

21
var변경 가능, const대신 사용하는 것이 좋습니다 ...
— Edwin Pratt

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 설명서에 잘 설명되어 있습니다. 공유 주셔서 감사합니다
— krupesh Anadkat

crossfetch의 polyfill을 사용하면 typescript와 node를 사용하고에서 ReferenceError: fetch is not defined오류를 수신했습니다 amazon-cognito-identity-js.
— John Hamelink

7

node-js 에서 typescript 를 사용 하고 오류가 발생하는 사용자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이 질문과 관련이 없으며이 오류를 해결하기 위해 설치하지 않아도됩니다. 또한 typescript와 관련이 없습니다.
— cnvzmxcvmcx

안녕하세요! 그래서 나는 똑같은 문제를 겪고 있지만 여전히 아무것도 고치지 않습니다. 다른 해결 방법이 있습니까?
— Masnad Nihit

5

아직 포함되어 있지 않기 때문에 프로젝트에 isomorphic-fetch모듈 을 사용해야합니다 . 이 문제를 해결하기 위해 아래 명령을 실행하십시오.NodeNodeFetch API

npm install --save isomorphic-fetch es6-promise

설치 후 프로젝트에서 아래 코드를 사용하십시오.

import "isomorphic-fetch"

이 답변이 도움이 되길 바랍니다.


6
적극적으로 유지되지 않습니다. 마지막으로 승인 된 PR 이후 몇 년이 지났습니다. github.com/matthew-andrews/isomorphic-fetch/graphs/tributors
— tomByrer

5

가장 좋은 것은 페치 용 Axios 라이브러리입니다. 사용 npm i --save axiosinstallng 및 사용 가져처럼, 대신에 단지 쓰기 Axios의에서 응답을 한 후 가져 오기 및 다음 () .


4

Node.js는 fetch () 메소드를 구현하지 않았지만이 환상적인 실행 환경의 외부 모듈 중 하나를 JavaScript에 사용할 수 있습니다.

위의 답변 중 하나에서 "node-fetch"가 인용되었으며 이는 좋은 선택입니다.

프로젝트 폴더 (.js 스크립트가있는 디렉토리)에서 다음 명령을 사용하여 해당 모듈을 설치하십시오.

npm i 노드 가져 오기-저장

그런 다음 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>
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.