You need to enable JavaScript to run this app. Node.js使用MojangJS getUUID报Cannot read property 'hasOwnProperty' of undefined错误
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用MojangJS getUUID报Cannot read property 'hasOwnProperty' of undefined错误

针对MojangJS抛出Cannot read property 'hasOwnProperty' of undefined的解决方法
  • 优先校验传入getUUID方法的入参有效性
    当前代码中传入的是usernameParts[1],如果用户名拆分逻辑存在下标偏移、拆分后数组长度不足的问题,会直接拿到undefined作为入参传入方法。MojangJS内部在校验参数时,会对传入的参数对象调用hasOwnProperty方法,一旦入参是undefined就会直接触发该类型错误。
    可以在调用方法前增加前置判断,过滤掉无效入参:
    // 先取出目标用户名,做非空、格式校验
    const targetUsername = usernameParts[1]?.trim();
    // Minecraft正版用户名规则为3-16位,支持字母、数字、下划线
    if (!targetUsername || !/^[a-zA-Z0-9_]{3,16}$/.test(targetUsername)) {
      console.error("传入的用户名格式无效");
      return;
    }
    
  • 排查依赖版本的兼容问题
    早期发布的MojangJS版本存在未处理空响应的逻辑漏洞:当查询的用户名不存在、请求触发Mojang接口限流返回空内容时,库内部会默认把接口返回值当作普通对象处理,尝试调用其hasOwnProperty方法,由于此时返回值为undefined,就会抛出对应类型错误。
    这种场景下的修复方式:
    • 升级本地安装的MojangJS到最新稳定版本,新版库已经补充了空响应、无效入参的前置校验逻辑,不会直接抛出底层的类型错误
    • 若无法升级版本,可在调用逻辑中增加前置校验,拦截所有不符合用户名规则的请求,避免触发底层逻辑报错
  • 调整Promise的错误捕获逻辑
    当前代码将await与.then().catch()链式调用混用,虽然语法合法,但容易丢失错误的上下文信息。可以替换为标准的async/await写法,将错误捕获收敛在try/catch块中,针对不同类型的错误做分支处理:
    let id;
    const targetUsername = usernameParts[1]?.trim();
    if (!targetUsername) {
      console.error("用户名参数为空,无法查询UUID");
      return;
    }
    try {
      id = await mojangjs.getUUID(targetUsername);
    } catch (err) {
      // 针对库内部抛出的属性读取错误,做友好提示
      if (err.message.includes("hasOwnProperty")) {
        console.error("UUID查询失败:请确认输入的是存在的Minecraft正版账号名");
        return;
      }
      console.error("查询流程出错:", err);
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 04:06:03