javascript - 我想将 s3 对象的字符串发送到客户端

标签 javascript node.js amazon-s3

我在将 s3 对象主体的字符串发送到客户端时遇到问题

我使用aws sdk作为 Node ,以及apollo服务器(express)、express、react

我确实从 s3 获取了对象并创建了可读流。然后我监听数据事件,以便我可以将字符串发送到客户端

let data = '';
s3.getObject(params).createReadStream().on('data', function(chunk) {
  data += chunk;
});

return { data }

我以为数据不是空字符串,但它是空字符串 我该怎么做才能解决这个问题?

编辑:

let data = '';
function promiseBasedRequest (params) {
  return new Promise((resolve, reject) => {
    s3.getObject(params).createReadStream()
    .on('data', function (chunk) {
      data += chunk;
    })
    .on('end', function () {
      resolve(data);
    })
    .on('error', function (err) {
      reject(err);
    });
  });
} 

await promiseBasedRequest(params);

这符合我的预期。

最佳答案

您没有等待写入结束。首先,该函数需要异步 promise 或回调。

function getData(params) {
    let data = ''
    return new Promise((res, rej) => {
        let data = '';
        s3.getObject(params).createReadStream()
        .on('data', function (chunk) {
            data += chunk;
        })
        .on('end', function(){
            res(data);
        })
        .on('error', function(){
            rej()
        })
    })
}

您可以通过以下方式使用该功能:

(async(){
    const data = await getData()
})();

或者getData().then(..)

编辑:此外,getObject 也有一个 promise 方法。

s3.getObject(params).promise().then(...).catch(...)

关于javascript - 我想将 s3 对象的字符串发送到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56935685/

相关文章:

javascript - 我不能在 html5/css3 中制作 div 或任何图像 100%

javascript - 正则表达式 -\[ 和\] 之间的文本

javascript - 在 javascript 中从 prompt.get trim 换行符

javascript - MariaDB 与 Sequelize 的连接

swift - 无法从 AWS S3、Swift 3 下载图像

python - 使用 Boto3 Lambda 函数进行 S3 存储桶生命周期配置并收到 MalformedXML 格式错误

java - 用于匹配行数和每行字符数的正则表达式

javascript - 函数未在 Bootstrap 弹出窗口内容 div 中设置内部 HTML

javascript - 为生产、开发、发布设置单独的变量值

amazon-s3 - s3 上经过身份验证的 url 是否安全?