网站接入Discord登录授权时报fetch is not a function错误如何解决
问题根因
TypeError: fetch is not a function报错的核心原因是Node.js环境的版本差异:
- 仅Node.js v18.0.0及以上版本内置了全局
fetchAPI,v17及更低版本默认不提供该方法 - 项目启动时只会做语法校验,不会执行未触发的回调逻辑,因此启动时无报错,只有Discord授权回调触发、执行到对应fetch代码时才会抛出错误
解决方案
可根据你的开发环境选择任意一种方案修复:
方案1:升级Node.js版本(推荐)
将本地Node.js版本升级到v18.0.0或更高的长期支持(LTS)版本,升级完成后重新运行node oauth.js启动项目即可,无需修改代码即可正常调用fetch。
方案2:安装兼容polyfill
如果暂时无法升级Node版本,可以安装node-fetch包补全fetch能力:
- 在项目根目录执行安装命令:
npm install node-fetch@2
注:node-fetch v3及以上版本仅支持ES Module导入规范,如果你项目中使用CommonJS规范(即用require导入模块),必须安装v2版本 - 在
oauth.js文件顶部添加导入代码:const fetch = require('node-fetch'); - 重新启动项目即可解决报错。
验证逻辑
修复完成后重新触发Discord授权流程,授权回调后不会再抛出fetch相关错误,可正常拉取授权信息完成登录逻辑。
内容的提问来源于stack exchange,提问作者user14118723
相关产品推荐
相关产品推荐

