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.