代码之家  ›  专栏  ›  技术社区  ›  Charlie Fish

catch aws s3 get object stream errors node.js获取对象流错误

  •  0
  • Charlie Fish  · 技术社区  · 6 年前

    我正在尝试构建一个Express服务器,它将使用node.js和express将S3 bucket中的项目发送到客户机。

    我在 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);
    

    我已经稍微改变了一下:

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

    我相信这应该行得通。我遇到的问题是当文件不存在或S3返回某种类型的错误时。应用程序崩溃,我得到以下错误:

    nosuchkey:指定的密钥不存在

    我的问题是,如何捕获或处理此错误?我试过一些东西,比如把它包起来 s3.getObject 尝试/捕获块中的行,所有这些都不起作用。

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

    1 回复  |  直到 6 年前
        1
  •  4
  •   A.Khan    6 年前

    我想您可以通过首先监听错误发射器来捕获错误。

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