Discord.JS机器人本地运行正常 部署Heroku后离线崩溃问题求助
错误根因
核心报错ReferenceError: AbortController is not defined由Node.js运行环境版本不匹配导致:你所使用的Discord.JS v13及以上版本,要求最低Node.js版本为16.6.0,AbortController是Node.js 15.x版本后才内置的全局API,Heroku默认的Node.js版本低于该要求,因此触发未定义错误,进程直接崩溃导致机器人离线。
修复方案
- 方案1:指定Heroku Node版本(推荐)
在项目根目录的package.json文件中新增engines字段,明确声明需要的Node.js版本,参考配置如下:
将修改后的{ "name": "你的机器人项目名", "version": "1.0.0", "engines": { "node": "16.x" }, "dependencies": { "discord.js": "^13.0.0" } }package.json提交并重新推送到Heroku,平台会自动匹配对应版本的Node.js运行环境,报错即可解决。 - 方案2:降级Discord.JS版本(不推荐)
如果你暂时无法升级Node版本,可以将Discord.JS降级到v12版本,执行本地安装命令npm install discord.js@12后重新部署即可。注意v12与v13版本API存在较大差异,你需要先调整原有代码适配v12的语法规则。
额外检查项
部署完成后确认Heroku后台的dyno配置:关闭web类型dyno,开启worker类型dyno,避免因web进程没有监听端口被Heroku强制回收。
内容的提问来源于stack exchange,提问作者Makler
相关产品推荐
相关产品推荐

