首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nextJS: async getInitialProps()与亚马逊S3?

nextJS: async getInitialProps()与亚马逊S3?
EN

Stack Overflow用户
提问于 2020-02-05 19:51:55
回答 1查看 360关注 0票数 0

我正在尝试让s3.getObject()在nextJS项目的异步getInitialProps()函数中运行,但我实在搞不懂如何将结果准备好作为对象返回(这是getInitialProps()和nextJS的SSR正常工作所必需的)。

代码如下:

代码语言:javascript
运行
复制
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代码返回(只是为了澄清问题)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-06 01:01:49

在您的代码中,s3.getObject与回调一起工作。您需要等待回调被调用。

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

代码语言:javascript
运行
复制
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 ...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60075209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档