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

discord.js中用node-fetch调用Mojang API如何判断无返回数据避免崩溃

当用户名不存在时,Mojang API会返回204 No Content状态码,此时响应体为空,你直接调用.json()解析空内容会抛出语法错误,再加上你判断的mojang.empty属性本身不存在,就会触发未捕获异常导致机器人崩溃。

你可以按如下方式修改代码:

fetch(`https://api.mojang.com/users/profiles/minecraft/${username}`)
    .then(res => {
        // 先校验响应状态,用户名不存在时状态码为204,res.ok为false
        if (!res.ok) throw new Error('USER_NOT_FOUND')
        return res.json()
    })
    .then(async mojang => {
        // 二次校验返回结构合法性,避免接口异常
        if (!mojang?.id) {
            return interaction.reply({ content: `未找到名为 **${username}** 的用户`, ephemeral: true })
        }
        // 此处编写正常业务逻辑,mojang.id即为无分隔符的UUID
    })
    .catch(async err => {
        // 统一捕获所有异常,避免机器人崩溃
        if (err.message === 'USER_NOT_FOUND') {
            return interaction.reply({ content: `未找到名为 **${username}** 的用户`, ephemeral: true })
        }
        console.error('Mojang API调用出错:', err)
        return interaction.reply({ content: '查询失败,请稍后重试', ephemeral: true })
    })

可选优化

  • 前置校验用户名格式:Minecraft合法用户名仅支持2-16位的大小写字母、数字、下划线,不符合规则的无需发起接口请求直接返回提示即可
  • 高频查询场景可以添加本地缓存,减少接口请求频次,提升响应速度
  • 可添加超时逻辑,避免接口无响应导致请求卡住

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:36:01