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

Discord.js机器人使用node-fetch时无法识别fetch函数求助

问题描述

我用Discord.js开发机器人,其中一个斜杠命令用于爬取网页,目的是告知用户喜爱平台的最新发布内容。导入node-fetch后出现“fetch函数不存在”的错误,代码作为独立脚本运行正常,但在Discord机器人环境中无法工作。

解决方案

这个问题核心是node-fetch版本的导入方式不兼容,不同版本的node-fetch导出逻辑有差异,Discord机器人的运行环境和你测试独立脚本的环境依赖版本可能不一致。

1. 调整node-fetch的导入方式

  • 若安装的是node-fetch v2版本(CommonJS导出),直接导入整个模块即可,不要解构fetch:
// 替换原导入行
const fetch = require("node-fetch");
  • 若安装的是node-fetch v3+版本(默认ES模块),Discord.js的CommonJS项目可能不兼容,最稳妥的方式是降级到v2:
npm uninstall node-fetch
npm install node-fetch@2

2. 修正后的完整代码

const { load } = require("cheerio");
const fetch = require("node-fetch");
const fs = require("fs");
const { SlashCommandBuilder } = require("discord.js"); // 补充缺失的导入

module.exports = {
  data: new SlashCommandBuilder()
    .setName("questnew")
    .setDescription("Get Quest releases!"),

  async execute(interaction, client) {
    try {
      const siteUrl = "http://www.vrdb.app/";
      const response = await fetch(siteUrl);
      const body = await response.text();
      const games = [];
      const $ = load(body);
      const elSelector = "#oculus-statistics > tbody > tr";
      $(elSelector).each((parentIdx, parentEl) => {
        if (parentIdx >= 0 && parentIdx <= 4) {
          $(parentEl)
            .children()
            .each((childIdx, childEl) => {
              if (childIdx === 0) {
                games.push($(childEl).text().trim());
              }
            });
        }
      });
      await interaction.reply({
        content: `最新Quest发布内容:\n${games.join("\n")}`,
        ephemeral: true,
      });
    } catch (error) {
      await interaction.reply({
        content: `执行命令时出错:${error.message}`,
        ephemeral: true,
      });
    }
  },
};

3. 额外注意事项

  • 原代码未导入SlashCommandBuilder,这会导致new SlashCommandBuilder()报错,必须补充该导入语句。
  • 确保机器人运行的Node.js版本符合node-fetch要求:v2支持Node.js 10+,v3需要Node.js 16+。

内容的提问来源于stack exchange,提问作者Mikaël Dufresne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:55:24