Решаем в Node.js: ошибка "ReferenceError: fetch not defined"
Быстрый ответ
Для устранения ошибки ReferenceError: fetch не определён
, добавьте в ваш Node.js проект пакет node-fetch
:
npm install node-fetch
const fetch = require('node-fetch');
Таким образом, вам будет доступен API fetch
для использования в Node.js, как это делается в браузере.
Подробное объяснение
Синтаксис ES-модулей
Если вы используете ES-модули, добавьте fetch
в ваш проект следующим образом:
import fetch from 'node-fetch';
Регистрация fetch
в качестве глобальной переменной
Для обеспечения глобального доступа к fetch
, что позволит вам избежать его импорта в каждом модуле, выполните:
import fetch from 'node-fetch';
globalThis.fetch = fetch;
Обращайте внимание: использование глобальных переменных требует особой осторожности.
Стратегии для конкретных версий
Node.js v17 и fetch
В Node.js v17 fetch
доступен в качестве экспериментальной функции. Запустите Node с параметром --experimental-fetch
:
node --experimental-fetch script.js
fetch
в Node.js v18 и более новых версиях
Начиная с версии Node.js v18, fetch
входит в стандартный набор функций и не требует дополнительной установки:
fetch('https://example.com')
Альтернативные решения для различных потребностей
Совместимость с CommonJS при использовании Node-fetch v2
Если вы всё ещё используете CommonJS, выполните:
const fetch = require('node-fetch');
Учтите, что require()
поддерживается с версией node-fetch@2.x
.
Унификация fetch с Cross-fetch
Используйте cross-fetch
для обеспечения единообразия работы между Node.js, браузерами и React Native:
import fetch from 'cross-fetch';
Применение модуля HTTPS
Перед тем, как появился fetch
, для отправки HTTP-запросов в Node использовали модуль https
:
const https = require('https');
https.get('https://example.com/api', (res) => {
});
Безопасность превыше всего: Лучшие практики
При работе с API-запросами не забывайте обрабатывать ошибки и проверять ответ перед использованием. Воспользуйтесь async/await для обеспечения читаемости кода. Старайтесь избегать глобальных зависимостей, чтобы предотвратить возникновение проблем, сложных для отладки.
Визуализация
Можно представить вашу среду выполнения JavaScript как набор инструментов, где API fetch
доступен не всегда. Используя node-fetch
, вы добавляете этот инструмент для среды Node.js:
npm install node-fetch
Вот пример кода, который вы могли бы использовать в Node.js:
const fetch = require('node-fetch');
fetch('https://example.com')
Полезные материалы
- Использование Fetch API – Веб API | MDN
- Глобальные объекты | Документация Node.js v21.6.1
- node-fetch – npm
- GitHub – axios/axios: HTTP-клиент, основанный на промисах, для браузера и Node.js
- Cross-Origin Resource Sharing (CORS) – HTTP | MDN
- Fetch
- GitHub – JakeChampion/fetch: Полифилл window.fetch для JavaScript