【问题标题】:Catch AWS S3 Get Object Stream Errors Node.js捕获 AWS S3 获取对象流错误 Node.js
【发布时间】:2019-01-14 07:34:32
【问题描述】:

我正在尝试构建一个 Express 服务器,该服务器将使用 Node.js 和 Express 将 S3 存储桶中的项目发送到客户端。

我在AWS documentation上找到了以下代码。

var s3 = new AWS.S3({apiVersion: '2006-03-01'});
var params = {Bucket: 'myBucket', Key: 'myImageFile.jpg'};
var file = require('fs').createWriteStream('/path/to/file.jpg');
s3.getObject(params).createReadStream().pipe(file);

我已将 I 稍微更改为以下内容:

app.get("/", (req, res) => {
    const params = {
        Bucket: env.s3ImageBucket,
        Key: "images/profile/abc"
    };
    s3.getObject(params).createReadStream().pipe(res);
});

我相信这应该可以正常工作。我遇到的问题是文件不存在或 S3 返回某种类型的错误。应用程序崩溃,我收到以下错误:

NoSuchKey: 指定的键不存在

我的问题是,我怎样才能捕捉或处理这个错误?我尝试了一些方法,例如将 s3.getObject 行包装在 try/catch 块中,但都没有奏效。

如何捕捉错误并以自己的方式处理?

【问题讨论】:

    标签: javascript node.js amazon-web-services express amazon-s3


    【解决方案1】:

    我想你可以通过先听错误发射器来捕捉错误。

    s3.getObject(params)
      .createReadStream()
      .on('error', (e) => {
        // NoSuchKey & others
      })
      .pipe(res)
      .on('data', (data) => {
        // data
      })
    

    【讨论】:

    • 看起来有效。我确实对其进行了清理以更好地满足我的需求,但效果很好!非常感谢。
    猜你喜欢
    • 2017-06-27
    • 2020-01-18
    • 2022-01-16
    • 2018-06-19
    • 2017-10-24
    • 2021-08-26
    • 2018-07-14
    • 2018-11-26
    • 1970-01-01
    相关资源
    最近更新 更多