Megajs 0.17.2版本的root属性已损坏

前端开发 2026-07-11

我在我的Node.js程序中使用megaJS 0.17.2,但似乎根对象没有作为一个属性添加到存储(megaDB)对象中,如下所示的initMega() 函数的代码片段:

async function initMega(){
  const { Storage } = require('megajs');
  try {
    let megaDB = new Storage({
      email: process.env.MEGA_EMAIL,
      password: process.env.MEGA_PASSWORD
    });

    megaDB.on('ready', () => {
      console.log("MEGA filesystem loaded.");
      console.log(Object.keys(megaDB)); //As you can see, it is run in the 'ready' event, so it should display inbox trash and root among others 
      //root = megaDB.root; The root property is broken, so this line is also broken.
    });

    console.log("MEGA connected");
    return megaDB;

  } catch (err) {
    console.error("Mega failure: " + err);
    setTimeout(initMega, 3000);
  }
}

有人知道为什么根属性没有出现吗?

解决方案

问题在于你在它准备好之前就返回 megaDB,并且 ready 事件在存储已完全加载后异步触发。在megaJS 0.17.2中,你需要显式调用 megaDB.ready(一个Promise)或在根对象被填充之前等待该事件。

async function initMega(){
  const { Storage } = require('megajs');
  try {
    let megaDB = new Storage({
      email: process.env.MEGA_EMAIL,
      password: process.env.MEGA_PASSWORD,
      autologin: false  // Prevent auto-login so we control the flow
    });

    // Explicitly trigger login and wait for it
    await megaDB.login();

    console.log("MEGA filesystem loaded.");
    console.log(Object.keys(megaDB));  // root, inbox, trash should now appear
    console.log("Root:", megaDB.root); // Should work correctly now

    console.log("MEGA connected");
    return megaDB;

  } catch (err) {
    console.error("Mega failure: " + err);
    setTimeout(initMega, 3000);
  }
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章