首页 > 解决方案 > Box Node SDK 不使用 readStream 提取文件

问题描述

我目前有一个两部分系统。该系统的目标是根据现有的盒子数据评估传入的数据,然后从盒子下载一个 zip 文件。

第 1 部分 - 我有一个异步函数,它调用 box sdk 并获取文件数据。然后它根据预先存在的格式评估名称并返回一个对象。

第 2 部分 - 利用从第 1 部分接收到的键/值来创建一个读取流,其中包含现有文件夹。

我遇到的问题是第 2 部分永远不会被触发。我查看事件侦听器,或尝试将读取数据通过管道传输到写入流,但没有任何反应。

我认为我的问题是我没有正确实例化我的异步函数。

我知道的一些事情确实有效:我知道 BoxClient 工作正常。我可以联系 Box SDK 并提取元数据。我还可以将 zip 文件上传到盒子。上传发生在此问题中未包含的单独函数中。

我曾尝试拉取下载 URL,然后使用 async-request 拉取数据。我从来没有从请求中得到任何下载数据。与我尝试使用 box sdk 中的读取流时相同。

如上所述,这是第 1 部分。

async function fileLookUp(id, userName, orderNumber, planId) {
  const boxClient = auth();
  const fileIdObj = {
    fileID: id,
  };
  const expectedName = `plan.${userName}.${orderNumber}.${planId}.zip`;

  // Get all box info on given file
  const foundFile = await boxClient.files.get(fileIdObj.fileID);

  const fileName = foundFile.name;

  if (fileName !== expectedName) throw Error(messages.fileSearch);

  fileIdObj.fileName = fileName;

  return fileIdObj;
}

第2部分

async function downloadZip(obj) {
  const boxClient = auth();
  await boxClient.files.getReadStream(obj.fileID, null, (err, stream) => {
    if (err) throw Error(err);
    stream.on('data', data => console.log(data));
  });
}

我在开玩笑地调用这些函数。

test('should successfully be called', async () => {
      // 'private/plans/'
      const temp = await fileLookUp('329362776631', 'testsurgeon2', '12-15-09-0004', 'plan1');
      await downloadZip(temp);
    }, 30000);

我希望我应该从读取流中获取数据。

标签: javascriptnode.jsasync-awaitbox

解决方案


问题是测试在数据流可以解决之前就解决了。为了解决这个问题,并在检索数据后获得管道的能力,我承诺了整个函数,以便测试等待承诺完成。


推荐阅读