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

使用discord.js调用AtomicAssets API时出现GET请求ENOTFOUND错误

解决Discord机器人调用AtomicAssets API时的ENOTFOUND错误

我帮你排查出了代码里的核心问题——http.request的配置参数写错了,这才导致了DNS解析失败的错误。具体问题和修复方案如下:

问题根源

你在options里的hostname字段填了完整的URL前缀加路径(http://test.wax.api.atomicassets.io/atomicassets),但这个字段只需要填写纯域名(比如test.wax.api.atomicassets.io),不能包含协议(http://)或路径部分。同时path字段也没写全,导致请求路径错误。

另外还有两个小问题需要优化:

  1. 每次收到消息都重复require('http')会浪费性能,应该把模块引入放在文件顶部
  2. http模块接收数据是分块的,不能在data事件里直接回复,需要收集完所有数据再处理

修正后的完整代码

// 把模块引入放在顶部,避免重复加载
const { token } = require('./token.json');
const Discord = require('discord.js');
const http = require('http'); // 如果API实际用HTTPS,换成require('https')

const bot = new Discord.Client();

bot.login(token);

bot.on('message', message => {
  if (message.content === 'assets') {
    const options = {
      hostname: 'test.wax.api.atomicassets.io', // 只保留纯域名,去掉协议和路径
      path: '/atomicassets/v1/assets', // 完整的API请求路径
      method: 'GET'
    };

    const req = http.request(options, res => {
      console.log(`statusCode: ${res.statusCode}`);
      let rawData = '';

      // 分块接收数据,拼接成完整内容
      res.on('data', chunk => {
        rawData += chunk;
      });

      // 数据接收完成后,处理并回复到Discord
      res.on('end', () => {
        try {
          const assetsData = JSON.parse(rawData);
          // 格式化JSON后发送,方便查看
          message.reply(`获取到资产数据:\n\`\`\`json\n${JSON.stringify(assetsData, null, 2)}\n\`\`\``);
        } catch (parseErr) {
          message.reply(`解析数据出错:${parseErr.message}`);
        }
      });
    });

    req.on('error', error => {
      console.error(error);
      message.reply(`请求API失败:${error.message}`);
    });

    req.end();
  }
});

关键修复点说明

  1. 修正hostname和path:拆分URL为纯域名和完整路径,让http模块能正确解析服务器地址,解决ENOTFOUND错误
  2. 完整接收数据:通过data事件拼接所有数据块,在end事件里处理完整内容,避免只发送部分数据
  3. 优化模块引入:把http模块的引入放在文件顶部,提升性能
  4. 增强错误反馈:添加JSON解析错误捕获,并把错误信息反馈给Discord用户,让机器人更友好

如果你的API实际使用HTTPS协议(比如Postman请求用的是https),只需要把const http = require('http')改成const https = require('https'),同时http.request换成https.request即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:47:35