You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署于Heroku的Discord bot出现UnhandledPromiseRejectionWarning报错咨询

错误根因

核心错误为ReferenceError: AbortController is not defined,触发原因如下:

  • 你使用的discord.js版本为v13及以上,该版本依赖仅在Node.js v16.6.0及更高版本才原生支持的AbortController API
  • Heroku默认使用的Node.js版本低于v16.6.0,无法识别该API,进而触发未捕获的Promise拒绝报错,最终进程崩溃。
解决方案

推荐优先用版本匹配方案从根本解决问题:

  • 第一步:在项目根目录的package.json文件中新增engines字段,明确指定符合要求的Node.js版本,示例配置如下:
{
  "name": "your-discord-bot",
  "version": "1.0.0",
  "engines": {
    "node": "16.x"
  }
}

配置完成后Heroku构建时会自动拉取v16最新版的Node.js运行环境。

  • 第二步:在bot登录逻辑处添加错误捕获,方便后续排查问题,示例代码如下:
// 替换你原有client.login的逻辑
client.login('你的bot token')
  .catch(err => console.error('Bot登录失败,错误信息:', err))
  • 第三步:提交修改后的代码到Heroku重新构建部署即可。

如果暂时无法升级Node.js版本,可使用临时兼容方案:
运行npm install abort-controller安装兼容包,然后在bot入口文件(./src/bot.js)最顶部添加如下代码补全全局API:

// CommonJS 环境使用以下代码
global.AbortController = require('abort-controller');

// ESModule 环境使用以下代码
import AbortController from 'abort-controller';
global.AbortController = AbortController;

内容的提问来源于stack exchange,提问作者Tanishq SIngh Anand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:27:02