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

为何无法导入jQuery?jsdom模块找不到问题求助

问题解决:找不到jsdom模块及替代请求方案

一、解决"Cannot find module 'jsdom'"的可能原因及步骤

  • 确认依赖已安装:尽管package.json中声明了jsdom,但可能未实际完成安装。执行npm install(或yarn install)重新安装所有依赖,确保node_modules目录下存在jsdom文件夹。
  • 检查Node.js版本:jsdom 20.x版本要求Node.js 16.14.0或更高版本。运行node -v查看当前版本,若版本过低,可选择升级Node.js,或把package.json中的jsdom版本降级到兼容旧Node的版本(比如^19.x)。
  • 清理缓存并重装:若之前安装出现缓存异常,删除node_modules文件夹和package-lock.json(或yarn.lock),再重新执行安装命令。
  • 确认文件目录:确保代码文件与package.json在同一根目录下,避免Node.js无法定位node_modules中的模块。

二、更适合Node.js的请求方式:放弃jQuery Ajax

jQuery是浏览器端库,其Ajax依赖浏览器的XMLHttpRequest对象,在Node.js中需模拟DOM环境(如jsdom)才能运行,既繁琐又冗余。推荐直接使用Node.js生态中的HTTP请求库,比如axios或node-fetch,示例如下:

方案1:使用axios

  1. 安装axios:
npm install axios
  1. 替换请求代码:
const axios = require('axios');
const { EmbedBuilder } = require('discord.js');

const limit = 1;

axios.get(`https://api.api-ninjas.com/v1/facts?limit=${limit}`, {
  headers: {
    'X-Api-Key': 'MY-API-KEY',
    'Content-Type': 'application/json'
  }
})
.then(result => {
  // API返回包含fact字段的数组,取第一个元素的fact值
  const fact = result.data[0].fact;
  console.log(fact);
  interaction.reply({
    embeds: [
      new EmbedBuilder()
        .setTitle(`Random fact for @<${interaction.user.id}>`)
        .setAuthor({ name: 'vixitu', iconURL: 'https://external-preview.redd.it/lqDFDXXvfqMs7kyQ9y1FrGcQzdCE23uMPlcxFqo_oYE.png?width=640&crop=smart&auto=webp&s=1aad996b62437feb367356c6bed434385bda0699' })
        .setDescription("Here is your random fact.")
        .setThumbnail('https://external-preview.redd.it/lqDFDXXvfqMs7kyQ9y1FrGcQzdCE23uMPlcxFqo_oYE.png?width=640&crop=smart&auto=webp&s=1aad996b62437feb367356c6bed434385bda0699')
        .addFields({ name: 'Random fact #1', value: fact })
        .setTimestamp()
    ]
  });
})
.catch(error => {
  console.error('Error:', error.response?.data || error.message);
});

方案2:使用node-fetch

  • Node.js 18及以上版本自带fetch API,无需安装;若使用低版本Node,需安装node-fetch@2:
npm install node-fetch@2
  • 请求代码:
const fetch = require('node-fetch');
const { EmbedBuilder } = require('discord.js');

const limit = 1;

fetch(`https://api.api-ninjas.com/v1/facts?limit=${limit}`, {
  method: 'GET',
  headers: {
    'X-Api-Key': 'MY-API-KEY',
    'Content-Type': 'application/json'
  }
})
.then(response => response.json())
.then(result => {
  const fact = result[0].fact;
  console.log(fact);
  interaction.reply({
    embeds: [
      new EmbedBuilder()
        .setTitle(`Random fact for @<${interaction.user.id}>`)
        .setAuthor({ name: 'vixitu', iconURL: 'https://external-preview.redd.it/lqDFDXXvfqMs7kyQ9y1FrGcQzdCE23uMPlcxFqo_oYE.png?width=640&crop=smart&auto=webp&s=1aad996b62437feb367356c6bed434385bda0699' })
        .setDescription("Here is your random fact.")
        .setThumbnail('https://external-preview.redd.it/lqDFDXXvfqMs7kyQ9y1FrGcQzdCE23uMPlcxFqo_oYE.png?width=640&crop=smart&auto=webp&s=1aad996b62437feb367356c6bed434385bda0699')
        .addFields({ name: 'Random fact #1', value: fact })
        .setTimestamp()
    ]
  });
})
.catch(error => {
  console.error('Error:', error.message);
});

注:API返回的是数组格式,每个元素包含fact字段,需取result[0].fact作为事实内容,而非直接使用result。

内容的提问来源于stack exchange,提问作者vixitu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:15:36