我正在尝试从S3对象获取数据并将其放入数组中。我计划通过这个数组进行映射,并将数据显示在网格/列表中的React前端上。我虽然在嵌套函数方面苦苦挣扎,所以希望得到一些帮助。

const dataFromS3 = async (bucket, file) => {
let lines = [];

const options = {
    Bucket: bucket,
    Key: file
  };

s3.getObject(options, (err, data) => {
if (err) {
  console.log(err);
} else {
  let objectData = data.Body.toString('utf-8');
  lines.push(objectData);
  console.log(lines);
  return lines;
}
  });
};


格式化有点奇怪,但这是我从s3获取数据的功能。我想以数组的形式获取此函数的输出,并将其传递给我正在测试的“ /”路由:

app.get('/', async (req, res, next) => {


try {
    let apolloKey = await dataFromS3(s3Bucket, apolloKeywords);
    res.send(apolloKey);
  } catch (err) {
    console.log('Error: ', err);
  }
});


似乎需要在第一个函数中返回s3.getObject函数中各行的返回值,以便我可以在app.get中访问它,但经过一些尝试后似乎无法执行此操作。如果我在datafromS3()的末尾将其返回,而行中的值将变成一个空数组,并且找不到返回它的方法。我已经尝试过使用Promise也使用这里找到的方法-How to get response from S3 getObject in Node.js?,但出现TypeError:将循环结构转换为JSON ...

谢谢

最佳答案

您需要像这样使dataFromS3函数。您没有从中返回任何东西。 AWS还提供了基于承诺的功能。

const dataFromS3 = async (bucket, file) => {
  const lines = [];

  const options = {
    "Bucket": bucket,
    "Key": file
  };

  const data = await s3.getObject(options).promise();
  const objectData = data.Body.toString("utf-8");
  lines.push(objectData); // You might need to conversion here using JSON.parse(objectData);
  console.log(lines);
  return lines;
};

关于javascript - 将S3对象数据放入数组- Node ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60616008/

10-16 22:00