Node.js中fetch未定义/非函数问题求助:邮箱生成器报错排查
问题原因与解决办法
核心原因
- Node.js版本过低:你的Node.js版本应该低于18.x,这个版本的Node.js没有内置Fetch API,所以首次运行会触发
fetch is not defined报错。 - node-fetch导入错误:你把
const fetch = require('node-fetch');注释掉了,就算取消注释,如果安装的是node-fetch v3+版本,它仅支持ESM导入(import fetch from 'node-fetch'),用CommonJS的require语法会直接导致fetch is not a function的错误。 - 代码存在重复定义
fetchData函数的冗余问题,虽不直接引发fetch报错,但会覆盖前一个函数定义;另外你使用了puppeteer却未导入,后续运行也会触发新的报错。
解决办法
方案一:升级Node.js使用内置Fetch API
若环境允许,直接升级Node.js到18.x及以上版本,无需额外安装包即可用内置fetch:
- 升级Node.js到18+(可通过官网下载或nvm等工具完成)
- 确保代码中不导入node-fetch,直接使用原生fetch即可。
方案二:正确使用node-fetch
若无法升级Node.js,按以下步骤操作:
- 安装兼容CommonJS的node-fetch v2版本:
npm install node-fetch@2
- 取消代码里的注释,正确导入fetch:
const fetch = require('node-fetch');
- 若坚持使用node-fetch v3+,需将文件改为ESM格式:
- 将文件后缀改为
.mjs,或在package.json中添加"type": "module" - 改用ESM导入语法:
import fetch from 'node-fetch'; - 将文件后缀改为
额外代码修复建议
- 移除重复的
fetchData函数,保留带try-catch的版本即可。 - 补充导入puppeteer-extra(因为你使用了stealth插件):
const puppeteer = require('puppeteer-extra');
内容的提问来源于stack exchange,提问作者JediSZN
相关产品推荐
相关产品推荐

