Решаем в Node.js: ошибка "ReferenceError: fetch not defined"

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для устранения ошибки ReferenceError: fetch не определён, добавьте в ваш Node.js проект пакет node-fetch:

Bash
Скопировать код
npm install node-fetch
JS
Скопировать код
const fetch = require('node-fetch');

Таким образом, вам будет доступен API fetch для использования в Node.js, как это делается в браузере.

Кинга Идем в IT: пошаговый план для смены профессии

Подробное объяснение

Синтаксис ES-модулей

Если вы используете ES-модули, добавьте fetch в ваш проект следующим образом:

JS
Скопировать код
import fetch from 'node-fetch';

Регистрация fetch в качестве глобальной переменной

Для обеспечения глобального доступа к fetch, что позволит вам избежать его импорта в каждом модуле, выполните:

JS
Скопировать код
import fetch from 'node-fetch';
globalThis.fetch = fetch;

Обращайте внимание: использование глобальных переменных требует особой осторожности.

Стратегии для конкретных версий

Node.js v17 и fetch

В Node.js v17 fetch доступен в качестве экспериментальной функции. Запустите Node с параметром --experimental-fetch:

JS
Скопировать код
node --experimental-fetch script.js

fetch в Node.js v18 и более новых версиях

Начиная с версии Node.js v18, fetch входит в стандартный набор функций и не требует дополнительной установки:

JS
Скопировать код
fetch('https://example.com')

Альтернативные решения для различных потребностей

Совместимость с CommonJS при использовании Node-fetch v2

Если вы всё ещё используете CommonJS, выполните:

JS
Скопировать код
const fetch = require('node-fetch');

Учтите, что require() поддерживается с версией node-fetch@2.x.

Унификация fetch с Cross-fetch

Используйте cross-fetch для обеспечения единообразия работы между Node.js, браузерами и React Native:

JS
Скопировать код
import fetch from 'cross-fetch';

Применение модуля HTTPS

Перед тем, как появился fetch, для отправки HTTP-запросов в Node использовали модуль https:

JS
Скопировать код
const https = require('https');

https.get('https://example.com/api', (res) => {
});

Безопасность превыше всего: Лучшие практики

При работе с API-запросами не забывайте обрабатывать ошибки и проверять ответ перед использованием. Воспользуйтесь async/await для обеспечения читаемости кода. Старайтесь избегать глобальных зависимостей, чтобы предотвратить возникновение проблем, сложных для отладки.

Визуализация

Можно представить вашу среду выполнения JavaScript как набор инструментов, где API fetch доступен не всегда. Используя node-fetch, вы добавляете этот инструмент для среды Node.js:

Bash
Скопировать код
npm install node-fetch

Вот пример кода, который вы могли бы использовать в Node.js:

JS
Скопировать код
const fetch = require('node-fetch');
fetch('https://example.com')

Полезные материалы

  1. Использование Fetch API – Веб API | MDN
  2. Глобальные объекты | Документация Node.js v21.6.1
  3. node-fetch – npm
  4. GitHub – axios/axios: HTTP-клиент, основанный на промисах, для браузера и Node.js
  5. Cross-Origin Resource Sharing (CORS) – HTTP | MDN
  6. Fetch
  7. GitHub – JakeChampion/fetch: Полифилл window.fetch для JavaScript