javascript - 下一个JS : async getInitialProps() with AWS S3?

标签 javascript node.js reactjs amazon-s3 next.js

我正在尝试让 s3.getObject() 在 nextJS 项目中的异步 getInitialProps() 函数内运行,但由于喜欢它,我无法弄清楚如何获取准备好的结果作为对象返回(getInitialProps() 和 nextJS 的 SSR 正常工作需要它)。

这是代码:

static async getInitialProps({ query }) {
  const AWS = require('aws-sdk');
  const s3 = new AWS.S3({
    credentials: {
      accessKeyId: KEY
      secretAccessKey: KEY
    }
  });

  // The id from the route (e.g. /img/abc123987)
  let filename = query.id;

  const params = {
    Bucket: BUCKETNAME
    Key: KEYDEFAULTS + '/' + filename
  };

  const res = await s3.getObject(params, (err, data) => {
    if (err) throw err;
    let imgData = 'data:image/jpeg;base64,' + data.Body.toString('base64');
    return imgData;
  });

  return ...
}

这个想法是从 S3 获取图像并将其作为 base64 代码返回(只是为了澄清问题)。

最佳答案

从您的代码中,s3.getObject 可与回调一起使用。您需要等待回调被调用。

您可以通过将此回调转换为 promise 来实现它。


static async getInitialProps({ query }) {
  const AWS = require('aws-sdk');
  const s3 = new AWS.S3({
    credentials: {
      accessKeyId: KEY
      secretAccessKey: KEY
    }
  });

  // The id from the route (e.g. /img/abc123987)
  let filename = query.id;

  const params = {
    Bucket: BUCKETNAME
    Key: KEYDEFAULTS + '/' + filename
  };

  const res = await new Promise((resolve, reject) => {
    s3.getObject(params, (err, data) => {
      if (err) reject(err);
      let imgData = 'data:image/jpeg;base64,' + data.Body.toString('base64');
      resolve(imgData);
    });
  });


  return ...
}

关于javascript - 下一个JS : async getInitialProps() with AWS S3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60075209/

相关文章:

node.js - Couchbase Lite - 同步引用字段

node.js - 如何使用 Node.js 在服务总线主题中创建新订阅?

javascript - 将 props 传递给组件的首选样式

javascript - 自定义 AngularJS 过滤器忽略我的参数并接收其他一些scope.data

javascript - 在 react 中创建一个计时器

c# - 在 ajax 调用中从 javascript 引发服务器端按钮单击事件

javascript - 删除 D3 中可拖动的 SVG 元素会导致 Cannot read property 'ownerSVGElement' of null

javascript - Express、Node、Angular 向前端发送音频文件

javascript - 获取和映射 react Js

javascript - 为什么在 reactjs 组件方法中未定义